对于大数据项目,我计划使用spark,它具有一些不错的功能,例如用于重复工作负载的内存计算。它可以在本地文件或 HDFS 之上运行。
但是,在官方文档中,我找不到任何关于如何处理 gzip 文件的提示。在实践中,处理 .gz 文件而不是解压缩文件可能非常有效。
有没有办法手动实现 gzip 文件的读取,或者在读取 .gz 文件时已经自动完成解压缩?
从 Spark Scala 编程指南的“Hadoop 数据集”部分:
Spark 可以从存储在 Hadoop 分布式文件系统 (HDFS) 或 Hadoop 支持的其他存储系统(包括您的本地文件系统、Amazon S3、Hypertable、HBase 等)中的任何文件创建分布式数据集。Spark 支持文本文件、SequenceFiles 和任何其他 Hadoop 输入格式。
对 gzip 输入文件的支持应该与 Hadoop 中的一样。比如sc.textFile("myFile.gz")
应该自动解压和读取gzip压缩文件(textFile()
其实是用Hadoop的实现TextInputFormat
的,支持gzip压缩文件)。
正如@nick-chammas 在评论中提到的:
请注意,如果您调用
sc.textFile()
gzip 压缩文件,Spark 将为您提供只有 1 个分区的 RDD(从 0.9.0 开始)。这是因为 gzipped 文件不可拆分。如果您不以某种方式重新分区 RDD,则对该 RDD 的任何操作都将仅限于单个核心