Spark支持gzip格式吗?

49

对于一个大数据项目,我打算使用Spark,它有一些不错的功能,例如针对重复工作负载的内存计算。它可以运行在本地文件或者HDFS之上。

然而,在官方文档中,我找不到任何关于如何处理gzip文件的提示。实际上,处理.gz文件可能比未压缩的文件更有效率。

是否有一种方法手动实现读取gzipped文件,或者说在读取.gz文件时自动进行解压缩?

1个回答

80

来自Spark Scala编程指南中的“Hadoop数据集”章节

Spark可以从存储在Hadoop分布式文件系统(HDFS)或Hadoop支持的其他存储系统(包括本地文件系统、Amazon S3、Hypertable、HBase等)中的任何文件创建分布式数据集。Spark支持文本文件、SequenceFiles和任何其他Hadoop InputFormat。

支持gzip输入文件的方式与Hadoop相同。例如,sc.textFile("myFile.gz")应该会自动解压缩并读取gzip压缩文件(textFile()实际上是使用了Hadoop的TextInputFormat,它支持gzip压缩文件)。

正如@nick-chammas在评论中提到的那样:

请注意,如果您在一个gzip文件上调用sc.textFile(),Spark将只为您提供一个仅有1个分区的RDD(截至0.9.0)。这是因为gzip文件不可分割。如果您不以某种方式重新分区RDD,则对该RDD的任何操作都将受限于单个核心。

3
当我尝试运行“logs = sc.textFile("logs / * .bz2")”时,后续的“logs.count()”会报错。有任何想法是为什么? - zbinsd
@zbinsd 你最终解决了吗?我在加载tar.gz文件时遇到以下错误:JsonParseException:非法字符((CTRL-CHAR,代码0)):仅允许在标记之间使用常规空格(\r、\n、\t)。 - Leon
我正在尝试处理来自Google Takeout的某些内容,但它是一个文件(.mbox),我想从存档中获取这个文件。我该如何指定我想要这个文件? - Mariano Kamp
看起来Spark会检查压缩文件的.gz文件扩展名。我有一个压缩文件,用sc.textFile()读取得很好,但当我改变扩展名时,它返回字节字符串,例如somefile.gz.bkp - gmajivu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接