对于我的研究,我有大约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/