在scala&spark中读取zst存档:本机zstandard库不可用

pes8fvy9  于 2021-07-14  发布在  Spark
关注(0)|答案(1)|浏览(478)

我正在尝试使用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中的任务0.0丢失(tid 0)(192.168.0.101执行器驱动程序):java.lang.runtimeexception:本机zstandard库不可用:此版本的libhadoop是在不支持zstd的情况下生成的。
我的hadoop checknative如下所示,但我从这里了解到apachespark有自己的zstandardcodec。
本机库检查:
hadoop:true/opt/hadoop/lib/native/libhadoop.so.1.0.0
zlib:true/lib/x8664-linux-gnu/libz.so.1
zstd:true/lib/x8664-linux-gnu/libzstd.so.1
snappy:true/lib/x8664-linux-gnu/libsnappy.so.1
lz4:对revision:10301
bzip2:true/lib/x8664-linux-gnu/libbz2.so.1
openssl:false evp\u cipher\u ctx\u cleanup
isa-l:false libhadoop是在没有isa-l支持的情况下构建的
pmdk:false本机代码是在不支持pmdk的情况下生成的。
任何想法都很感激,谢谢!
更新1:根据这篇文章,我更好地理解了这条消息的含义,即在默认情况下编译hadoop时没有启用zstd,因此一个可能的解决方案显然是在构建它时启用该标志。

lyr7nygr

lyr7nygr1#

由于我不想自己构建hadoop,受这里使用的变通方法的启发,我将spark配置为使用hadoop本机库:

spark.driver.extraLibraryPath=/opt/hadoop/lib/native
spark.executor.extraLibraryPath=/opt/hadoop/lib/native

我现在可以将zst存档读入一个没有问题的Dataframe。

相关问题