scala - 解压缩多个 *.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
非常感谢。
解决方案
下面提到的代码似乎工作正常。
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")
推荐阅读
- node.js - 无法从外部访问 Google App Engine 实例
- automl - Cloud AutoML API 之前未在项目 618104708054 中使用或已禁用
- slurm - 多个节点的 SLURM 作业脚本
- c# - 设置 Activity.Typing 动画的时间
- android - 尝试从 firebase 检索数据
- java - Java错误:
预期的公开课 - javascript - 将文件作为 JSON 上传到 Python 网络服务器
- javascript - 用 mySql 结果刷新 div
- c - 如何在 sscanf 中使用 set scanset 读取 0-9 等数字
- java - 迭代缓存时,Ignite 消耗所有内存并因 OutOfMemory 失败