在 Spark 2.3.0 中读取 Zstandard 压缩文件
Posted
技术标签:
【中文标题】在 Spark 2.3.0 中读取 Zstandard 压缩文件【英文标题】:Read Zstandard-compressed file in Spark 2.3.0 【发布时间】:2018-06-15 02:16:38 【问题描述】:Apache Spark 据称从 Spark 2.3.0 (https://issues.apache.org/jira/browse/SPARK-19112) 开始支持 Facebook 的 Zstandard 压缩算法,但我实际上无法读取 Zstandard 压缩文件:
$ spark-shell
...
// Short name throws an exception
scala> val events = spark.read.option("compression", "zstd").json("data.zst")
java.lang.IllegalArgumentException: Codec [zstd] is not available. Known codecs are bzip2, deflate, uncompressed, lz4, gzip, snappy, none.
// Codec class can be imported
scala> import org.apache.spark.io.ZStdCompressionCodec
import org.apache.spark.io.ZStdCompressionCodec
// Fully-qualified code class bypasses error, but results in corrupt records
scala> spark.read.option("compression", "org.apache.spark.io.ZStdCompressionCodec").json("data.zst")
res4: org.apache.spark.sql.DataFrame = [_corrupt_record: string]
我需要做什么才能读取这样的文件?
环境是 AWS EMR 5.14.0。
【问题讨论】:
【参考方案1】:根据this comment,Spark 2.3.0 中对 Zstandard 的支持仅限于内部和随机输出。
读取或写入 Zstandard 文件使用 Hadoop 的 org.apache.hadoop.io.compress.ZStandardCodec,它是在 Hadoop 2.9.0 中引入的(2.8.3 包含在 EMR 5.14.0 中)。
【讨论】:
我使用的是 Hadoop 3.2.2,但是在尝试读取 zstd 时,它给了我一个 java.lang.RuntimeException: native zStandard library not available: 这个版本的 libhadoop 是在没有 zstd 支持的情况下构建的.有任何想法吗?谢谢 我也是@cnstlungu,我正在运行hadoop 2.10 hadoopchecknative -a
,似乎zstd : false,可能zstd 许可证没有完全开放,apache 团队决定没有它就建?
@DiegoScaravaggi 我是这样整理的***.com/questions/67099204/…
@cnstlungu ,我认为你是对的,但我没有使用 3.x 数据平台,在我的 2.10
上,当我添加 native 库时我得到了@ 987654325@,暂时先推迟nativa库,我会安排一个3.x的测试平台,等待bigtop apache团队稳定构建1.6以上是关于在 Spark 2.3.0 中读取 Zstandard 压缩文件的主要内容,如果未能解决你的问题,请参考以下文章
如何在不使用 flatMapsGroupWithState 的情况下使用 Structured Streaming 2.3.0 在 spark 中进行无状态聚合?
我可以使用spark 2.3.0和pyspark从Kafka进行流处理吗?