我试图使用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检查看起来如下所示,但我从这里了解到Apache有自己的ZStandardCodec。
本机库检查:
任何想法都很感谢,谢谢!
更新1:根据这个帖子,我更好地理解了消息的含义,即在默认情况下编译Hadoop时不启用zstd,所以可能的解决方案之一显然是使用启用的标志构建它。
发布于 2021-04-18 21:25:15
由于我不想自己构建Hadoop,并且受到使用这里的解决方案的启发,所以我已经将Spark配置为使用Hadoop本地库:
spark.driver.extraLibraryPath=/opt/hadoop/lib/native
spark.executor.extraLibraryPath=/opt/hadoop/lib/native现在,我可以毫无问题地将zst归档文件读入DataFrame中。
https://stackoverflow.com/questions/67099204
复制相似问题