scala - 在 Scala 和 Spark 中读取 zst 存档:本机 zStandard 库不可用
问题描述
我正在尝试使用 Scala 上的 Spark 读取 zst 压缩文件。
import org.apache.spark.sql._
import org.apache.spark.sql.types._
val schema = new StructType()
.add("title", StringType, true)
.add("selftext", StringType, true)
.add("score", LongType, true)
.add("created_utc", LongType, true)
.add("subreddit", StringType, true)
.add("author", StringType, true)
val df_with_schema = spark.read.schema(schema).json("/home/user/repos/concepts/abcde/RS_2019-09.zst")
df_with_schema.take(1)
不幸的是,这会产生以下错误:
org.apache.spark.SparkException:作业因阶段失败而中止:阶段 0.0 中的任务 0 失败 1 次,最近一次失败:阶段 0.0(TID 0)中丢失任务 0.0(192.168.0.101 执行程序驱动程序):java.lang。 RuntimeException:本机 zStandard 库不可用:此版本的 libhadoop 是在没有 zstd 支持的情况下构建的。
我的 hadoop checknative 如下所示,但我从这里了解到 Apache Spark 有自己的 ZStandardCodec。
本机库检查:
- hadoop:真/opt/hadoop/lib/native/libhadoop.so.1.0.0
- zlib: 真 /lib/x86_64-linux-gnu/libz.so.1
- zstd:真 /lib/x86_64-linux-gnu/libzstd.so.1
- snappy: 真 /lib/x86_64-linux-gnu/libsnappy.so.1
- lz4:真正的修订:10301
- bzip2:真 /lib/x86_64-linux-gnu/libbz2.so.1
- openssl: false EVP_CIPHER_CTX_cleanup
- ISA-L:在没有 ISA-L 支持的情况下构建了错误的 libhadoop
- PMDK: false 本机代码是在没有 PMDK 支持的情况下构建的。
任何想法表示赞赏,谢谢!
更新 1:根据这篇文章,我已经更好地理解了该消息的含义,即默认情况下编译 Hadoop 时未启用 zstd,因此一种可能的解决方案显然是在启用该标志的情况下构建它。
解决方案
由于我不想自己构建 Hadoop,受此处使用的解决方法的启发,我将 Spark 配置为使用 Hadoop 原生库:
spark.driver.extraLibraryPath=/opt/hadoop/lib/native
spark.executor.extraLibraryPath=/opt/hadoop/lib/native
我现在可以毫无问题地将 zst 存档读入 DataFrame。
推荐阅读
- c# - 选择标签 ASP.NET Core 没有项目
- sql-server - 使用 EXECUTE 从 SQL Server 调用用户定义函数时的不同标量结果
- c# - 为什么 WPF 定义它自己的类型来表示二维空间中的点而不是使用 System.Numerics.Vector2
- c++ - 深度测试丢弃自定义帧缓冲区上的片段
- android - Kotlin Retrofit Rx android.os.NetworkOnMainThreadException
- python - 过采样后完全忽略了一类
- progressive-web-apps - 与桌面 Chrome 浏览器相比,PWA(Android Chrome)中的图像大小应该是多少
- yii2 - Yii2 - 同一域上的不同持久登录 cookie
- python - 如何从具有 {"key":[{"A":"1"},{"B":"2"}] 的字典中提取键?
- jquery - 响应后,我需要小屏幕的表头,但它不工作它重复表头。因为我用for循环来打印标题