在 Spark 2.4.7 Hadoop 2.7.7 中读取 Zstandard 压缩 Parquet

问题描述 投票:0回答:1

我们使用的平台有 Spark 2.4.7 和 Hadoop 2.7.7 库的限制。 我们在 s3 上有一些 zstandard parquet 格式的数据。 有没有一种方法可以让我们编写某种客户代码来在我们的工作中读取这个 zstandard 镶木地板?

我们无权访问基础设施,因此无法在计算机上安装任何其他内容。我们可以增加或减少执行者(垂直和水平)。

我们对作业代码有完全的控制权,这就是我们需要在平台上管理和提交的代码,该平台将代码提交到Spark并执行它。

当我们尝试使用spark.read.parquet(“文件路径”)读取文件时,我们收到此错误:java.lang.ClassNotFoundException:org.apache.hadoop.io.compress.ZStandardCodec

这显然是预料之中的。 当我们包含 hadoop-common 2.9.1 依赖项(该依赖项具有 zstandard 编解码器支持)时,我们会收到另一个错误: 这个版本的 libhadoop 是在没有 zstd 支持的情况下构建的

有没有办法编写一个自定义类来将 zstandard 压缩镶木地板读取到 Spark 数据帧中?

仅供参考:我已经检查了其他一些 SOF 问题,但没有涵盖我的用例。特别是由于对基础设施访问的限制。

apache-spark hadoop
1个回答
0
投票
  1. 你不能混合hadoop-jar版本,就像你不能混合spark版本一样。
  2. hadoop 本机库也需要同步。
  3. ZStandard 附带 HADOOP-13578。添加用于 ZStandard 压缩的编解码器,仅限 2.9+

因此,如果您需要 Zstandard,则需要使用 2017 年或更高版本发布的 hadoop 版本

唯一的解决方法是:

  • 将该功能向后移植到您自己的 hadoop-2.7 私有分支,重建它和本机库,然后部署。
  • 获取 hadoop 代码,重命名软件包,将任何新的依赖项包含在重新分发的 JAR 中,以某种方式解决 libhadoop 路径问题。 任何一条路都注定失败。如果不是原生的东西,第二个也许是可能的。
© www.soinside.com 2019 - 2024. All rights reserved.