Spark 支持 gzip 格式吗?
Posted
技术标签:
【中文标题】Spark 支持 gzip 格式吗?【英文标题】:Is gzip format supported in Spark? 【发布时间】:2013-04-24 12:29:31 【问题描述】:对于一个大数据项目,我计划使用spark,它具有一些不错的功能,例如用于重复工作负载的内存计算。它可以在本地文件或 HDFS 之上运行。
但是,在官方文档中,我找不到任何关于如何处理 gzip 文件的提示。在实践中,处理 .gz 文件而不是解压缩文件会非常有效。
有没有办法手动实现对 gzip 文件的读取,或者在读取 .gz 文件时已经自动完成解压缩?
【问题讨论】:
【参考方案1】:来自 Spark Scala 编程指南的section on "Hadoop Datasets":
Spark 可以从存储在 Hadoop 分布式文件系统 (HDFS) 或 Hadoop 支持的其他存储系统(包括您的本地文件系统、Amazon S3、Hypertable、HBase 等)中的任何文件创建分布式数据集。 Spark 支持文本文件、SequenceFiles 和任何其他 Hadoop 输入格式。
对 gzip 输入文件的支持应该与在 Hadoop 中的工作方式相同。比如sc.textFile("myFile.gz")
应该自动解压并读取gzip压缩文件(textFile()
实际上是implemented使用Hadoop的TextInputFormat
,支持gzip压缩文件)。
正如@nick-chammas 在 cmets 中提到的:
请注意,如果您在 gzip 压缩文件上调用
sc.textFile()
,Spark 将给出 你是一个只有 1 个分区的 RDD(从 0.9.0 开始)。这是因为 gzip 文件是not splittable。如果您不重新分区 RDD 不知何故,对该 RDD 的任何操作都将仅限于单个核心
【讨论】:
当我尝试logs = sc.textFile("logs/*.bz2")
时,我在随后的logs.count()
上收到错误消息。任何想法为什么?
@zbinsd 你最后想通了吗?加载 tar.gz 文件时出现以下错误: JsonParseException: Illegal character ((CTRL-CHAR, code 0)): only regular white space (\r, \n, \t) is allowed between tokens
@Leon,来自这个页面:spark.apache.org/docs/latest/programming-guide.html,它说:Spark 的所有基于文件的输入法,包括 textFile,都支持在目录、压缩文件和通配符上运行。例如,您可以使用 textFile("/my/directory")、textFile("/my/directory/*.txt") 和 textFile("/my/directory/*.gz"),希望对您有所帮助。
我正在尝试处理来自 Google Takeout 的内容,但它是我想要从存档中获取的一个文件 (.mbox)。如何指定我想要这个文件?
看来 spark 检查压缩文件的 .gz
文件扩展名。我有一个压缩文件,可以用sc.textFile()
很好地读取,但是当我弄乱扩展名时会返回字节字符串,somefile.gz.bkp
以上是关于Spark 支持 gzip 格式吗?的主要内容,如果未能解决你的问题,请参考以下文章