我想将gzip压缩文件读为RDD[String]
使用等效sc.textFile("path/to/file.Z")
。
除了我的文件扩展名(如果不是)之外,gz
而是文件扩展名Z
,因此该文件不被识别为压缩文件。
我无法重命名它们,因为这会破坏生产代码。我不想复制它们,因为它们很大且很多。我想我可以使用某种符号链接,但我想先看看是否有使用scala / spark的方法(我现在在本地Windows机器上)。
如何有效读取此文件?
这里有一种解决方法,可以解决此问题http://arjon.es/2015/10/02/reading-compressed-data-with-spark-using-unknown-file-extensions/
相关部分:
...扩展GzipCodec并覆盖getDefaultExtension方法。
package smx.ananke.spark.util.codecs
import org.apache.hadoop.io.compress.GzipCodec
class TmpGzipCodec extends GzipCodec {
override def getDefaultExtension(): String = ".gz.tmp" // You should change it to ".Z"
}
现在我们刚刚注册了此编解码器,在SparkConf上设置了spark.hadoop.io.compression.codecs:
val conf = new SparkConf()
// Custom Codec that process .gz.tmp extensions as a common Gzip format
conf.set("spark.hadoop.io.compression.codecs", "smx.ananke.spark.util.codecs.TmpGzipCodec")
val sc = new SparkContext(conf)
val data = sc.textFile("s3n://my-data-bucket/2015/09/21/13/*")
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句