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 文件的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Python 3 将 lzma2 (.xz) 和 zstd (.zst) 文件解压缩到文件夹中?

Java - 读取 BZ2 文件并即时解压缩/解析

Linux基础操作命令-打包压缩

在 Python 中解压缩 .bz2 文件

压缩,解压缩

Java解压缩.zip.tar.gz.tar.bz2(支持中文)