首页 > 解决方案 > 解压缩多个 *.gz 文件并在 spark scala 中制作一个 csv 文件

问题描述

我在 S3 存储桶中有多个文件,必须解压缩这些文件并将所有文件合并到具有单个标头的单个文件(CSV)中。所有文件都包含相同的标题。

数据文件如下所示。

存储系统:S3 存储桶。

 part-0000-XXXX.csv.gz
 part_0001-YYYY.csv.gz
 part-0002-ZZZZ.csv.gz
 .
 .
 .
 .
 part-0010_KKKK.csv.gz.

如上所示,我想要所有文件中的一个 CSV 文件。请帮助我如何解压缩和合并所有文件。

将所有文件解压缩并合并为单个 CSV 后,我可以使用此文件与以前的文件进行数据比较..

我正在使用 spark 2.3.0 和 scala 2.11

非常感谢。

标签: scalaapache-sparkapache-spark-sqldatabricks

解决方案


下面提到的代码似乎工作正常。

scala> val rdd = sc.textFile("/root/data")
rdd: org.apache.spark.rdd.RDD[String] = /root/data MapPartitionsRDD[1] at textFile at <console>:24


scala> rdd.coalesce(1).saveAsTextFile("/root/combinedCsv", classOf[org.apache.hadoop.io.compress.GzipCodec])

您可以看到输入数据在/root/data目录中,并且 gzip 格式的组合 csv 存储在/root/combinedCsv目录中。

更新

如果要以 csv 格式存储数据,请去掉 GzipCodec 部分。

scala> rdd.coalesce(1).saveAsTextFile("/root/combinedCsv")

推荐阅读