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

Posted

技术标签:

【中文标题】如何使用 spark DF 或 DS 读取“.gz”压缩文件?【英文标题】:How to read ".gz" compressed file using spark DF or DS? 【发布时间】:2022-01-24 02:04:51 【问题描述】:

我有一个 .gz 格式的压缩文件,是否可以直接使用 spark DF/DS 读取文件?

详细信息:文件是带有制表符分隔的 csv。

【问题讨论】:

SO 中的许多人可能受到欺骗。有些是:this 和 this spark.read.csv 适用于 gzip 文件 【参考方案1】:

读取压缩的 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 需要使用单核读取整个文件,这会减慢速度。读取完成后,可以对数据进行混洗以增加并行度。

【讨论】:

谢谢,我确实使用读取 csv 选项直接读取了文件。我可以观察到缓慢。使用单核读取整个文件是最佳做法吗? @prady 由于文件是gzip,因此必须使用单核读取。一种解决方法是首先解压缩文件并使用 Spark 读取数据。或者你可以改变压缩类型,参考这个问题:***.com/questions/14820450/… 感谢参考 有人能告诉我如何将 csv.bz2 读入数据帧吗? @SithijaPiyumanThewaHettige:应该应用与此答案相同的方法,即:spark.read.textFile("file.csv.bz2")(您也可以尝试spark.read.textFile)。

以上是关于如何使用 spark DF 或 DS 读取“.gz”压缩文件?的主要内容,如果未能解决你的问题,请参考以下文章

spark streaming-DS,DF,RDD相互转换,submit,数据落盘

(PY)Spark:如何读取扩展名为“.gz”的“.txt”文件

如何仅读取目录中的前 5 个文件夹:Spark

如何在 spark scala 中更快地处理 .gz 文件?

Spark 3.0 - 使用 .save() 或 .saveAsTable() 保存时的读取性能

Spark:如何使用子集日期读取多个 s3 文件