我正在尝试使用 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,因此一种可能的解决方案显然是在启用该标志的情况下构建它。