2013-04-30 164 views
33

对于大数据项目,我计划使用spark,它具有一些很好的功能,例如针对重复工作负载的内存计算。它可以在本地文件上运行,也可以在HDFS上运行。Spark中的gzip支持

但是,在官方文档中,我找不到任何有关如何处理gzip文件的提示。实际上,处理.gz文件而不是解压缩文件可能非常有效。

有没有办法手动实现读gzipped文件或解压缩已经自​​动完成阅读.gz文件时?

回答

66

从星火Scala编程指南的section on "Hadoop Datasets"

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

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

正如在评论中提到通过@尼克 - chammas:

请注意,如果你在一个压缩文件中调用sc.textFile(),星火会给你 的RDD只有1分(截至0.9.0) 。这是因为 gzip文件是not splittable。如果不重新分区RDD 不知何故,对RDD任何操作将仅限于单核

+45

我想指出,如果你调用'sc.textFile()'对gzip压缩文件,星火会给你只有一个分区的RDD(从0.9.0开始)。这是因为gzipped文件[不可拆分](http://mail-archives.apache.org/mod_mbox/spark-user/201310.mbox/%[email protected] .COM%3E)。如果您不以某种方式重新对RDD进行重新分区,则该RDD上的任何操作都将限制为单个核心。 – 2014-04-03 19:37:06

+3

当我尝试'logs = sc.textFile(“logs/*。bz2”)'时,后续的'logs.count()'出现错误。任何想法为什么? – zbinsd 2015-03-16 18:46:59

+0

@zbinsd你有没有想过在最后?加载tar.gz文件时出现以下错误:JsonParseException:非法字符((CTRL-CHAR,代码0)):令牌之间只允许使用常规空格(\ r,\ n,\ t) – Leon 2015-10-27 17:01:50