Spark - 如何将 Bz2 文件解压缩为 parquet 文件

Posted

技术标签:

【中文标题】Spark - 如何将 Bz2 文件解压缩为 parquet 文件【英文标题】:Spark - How to decompress Bz2 file to parquet file 【发布时间】:2021-08-19 19:11:20 【问题描述】:

我有一个被压缩成 bzip2 的 parquet 文件,这与使用 bzip2 或 snappy 压缩的 parquet 文件不同。

有人可以告诉我如何将此文件解压缩回 parquet 文件吗?

我试过了

spark.sparkContext.textFile("/mnt/shahgau/test/000000_0.bz2").saveAsHadoopFile("/mnt/shahgau/test/00000_0.parquet", "org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat")

错误:

org.apache.spark.SparkException: RDD element of type java.lang.String cannot be used

我尝试将其作为 parquet 文件读取,但随后出现错误

spark.read.parquet("/mnt/shahgau/test/000000_0.bz2").show()

错误:

Caused by: java.io.IOException: Could not read footer for file: 

【问题讨论】:

您能分享一下您是如何将 parquet 文件压缩成 bzip2 的吗?对我来说似乎工作正常 【参考方案1】:

如果你自己使用过 bzip2,我可以使用如下:

%sh 允许您在笔记本中运行 shell 代码。

压缩.parquet

%sh
bzip2 /dbfs/FileStore/user/adf/userdataOriginal.parquet

解压回parquet:

%sh
bzip2 -d /dbfs/FileStore/user/adf/userdataOriginal.parquet.bz2

读取拼花文件:

spark.read.parquet("dbfs:/FileStore/user/adf/userdataOriginal.parquet").show()

【讨论】:

这仅在文件存储在 databricks 本地存储中时才有效,如果存储在 ADLS 中则无效。我说的是超过 PB 的数据,因此来回移动是行不通的。

以上是关于Spark - 如何将 Bz2 文件解压缩为 parquet 文件的主要内容,如果未能解决你的问题,请参考以下文章