如何使用 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 和 thisspark.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”文件
如何在 spark scala 中更快地处理 .gz 文件?