apache-spark - 将2TB的压缩多行JSON转换为ND JSON

标签 apache-spark hadoop apache-beam

对于我的研究,我有大约20,000个gzip压缩多行json文件(〜2TB,所有文件都具有相同的架构)的数据集。我需要处理和清理这些数据(我应该说我对数据分析工具是非常陌生的)。

花了几天时间阅读了有关Spark和Apache Beam的信息之后,我确信第一步将是首先将此数据集转换为NDJSON。在大多数书籍和教程中,他们总是假设您正在使用某些新的行分隔文件。

转换此数据的最佳方法是什么?
我试图在gcloud上启动一个大型实例,并仅使用gunzip和jq来做到这一点。毫不奇怪,这似乎将花费很长时间。

在此先感谢您的帮助!

最佳答案

如果使用TextIO,则Apache Beam支持解压缩文件。
但是分隔符仍然是换行符。

对于多行json,您可以并行读取完整的文件,然后将json字符串转换为pojo,并最终重新整理数据以利用并行性。

所以步骤是

Get the file list > Read individual files > Parse file content to json objects > Reshuffle > ...

您可以通过FileSystems.match("gcs://my_bucker").metadata()获得文件列表。

通过压缩Compression.detect((fileResouceId).getFilename()).readDecompressed(FileSystems.open(fileResouceId))读取单个文件

关于apache-spark - 将2TB的压缩多行JSON转换为ND JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57609037/

相关文章:

hadoop - 由于 24 小时后无法在缓存中找到 token ,Spark 启动器作业未启动

hadoop - 如何创建以半列分隔并以逗号作为小数点的分区表?

python - Pyspark CSV 到 RDD 到坐标矩阵

python - 如何通过pyspark读取gz压缩文件

hadoop - 无法在mapreduce中运行我的第一个单词计数示例

java - Flink 集群上的 Kafka jaas 验证失败

scala - 数据流模板功能的不一致行为?

google-cloud-dataflow - Apache Beam 管道中的连续状态

python - 如何访问 Spark RandomForest 中的单个预测?

database - 将数据从 HDFS 加载到 Vertica