我正在尝试使用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,因此一个可能的解决方案显然是在构建它时启用该标志。
1条答案
按热度按时间lyr7nygr1#
由于我不想自己构建hadoop,受这里使用的变通方法的启发,我将spark配置为使用hadoop本机库:
我现在可以将zst存档读入一个没有问题的Dataframe。