【发布时间】:2018-09-04 13:11:12
【问题描述】:
我有一个 .gz 格式的压缩文件,是否可以直接使用 spark DF/DS 读取文件?
详细信息:文件是带有制表符分隔的 csv。
【问题讨论】:
标签: apache-spark apache-spark-sql gzip apache-spark-dataset
我有一个 .gz 格式的压缩文件,是否可以直接使用 spark DF/DS 读取文件?
详细信息:文件是带有制表符分隔的 csv。
【问题讨论】:
标签: apache-spark apache-spark-sql gzip apache-spark-dataset
读取压缩的 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 需要使用单个内核读取整个文件,这会减慢速度。读取完成后,可以对数据进行混洗以增加并行度。
【讨论】:
gzip,因此必须使用单核读取。一种解决方法是首先解压缩文件并使用 Spark 读取数据。或者你可以改变压缩类型,参考这个问题:stackoverflow.com/questions/14820450/…
spark.read.textFile("file.csv.bz2")(您也可以尝试spark.read.textFile)。