如何使用Spark DF或DS读取“.gz”压缩文件?

18

我有一个后缀为.gz的压缩文件,是否可能直接使用Spark DF/DS读取该文件?

细节:该文件是用制表符分隔的CSV文件。


可能是SO中的许多重复问题之一。其中一些包括:这个这个 - sujit
2
spark.read.csv 可以处理 gzip 格式的文件。 - philantrovert
1个回答

21

读取压缩的csv文件与读取未压缩的csv文件相同。对于Spark版本2.0+,可以使用Scala按以下方式完成(请注意选项中的额外制表符分隔符):

val df = spark.read.option("sep", "\t").csv("file.csv.gz")

PySpark:

df = spark.read.csv("file.csv.gz", sep='\t')

唯一需要考虑的额外因素是.gz文件无法分割,因此Spark需要使用单个核心读取整个文件,这会减慢速度。读取完成后,数据可以进行shuffle以增加并行性。


谢谢,我确实使用了读取csv选项直接读取文件。我注意到速度很慢。是用单个核读取整个文件的最佳做法吗? - prady
由于该文件是gzip格式,必须使用单个核心进行读取。一个解决方法是先解压文件,然后使用Spark读取数据。或者您可以更改压缩类型,请参考此问题:https://dev59.com/v2Uq5IYBdhLWcg3wEcRZ - Shaido
感谢提供参考。 - prady
有人能告诉我如何将csv.bz2读入数据框架中吗? - Sithija Piyuman Thewa Hettige
@SithijaPiyumanThewaHettige:与此答案中相同的方法应该适用,即:spark.read.textFile("file.csv.bz2")(您也可以尝试使用spark.read.textFile)。 - Shaido

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