如何在PySpark中安装LZO、Brotli等压缩编解码器解决调用报错问题
报错根因
你遇到的类找不到异常是因为Spark读写Parquet时的压缩编解码器加载逻辑与ORC不同:ORC格式直接复用Hadoop全局注册的编解码器,而Parquet格式需要单独引入对应编解码器的依赖包,且在Spark配置中显式注册才可以调用,所以会出现LZO在ORC下可用、Parquet下报错的情况。
LZO编解码器配置步骤
- 首先下载和你集群Hadoop版本匹配的
hadoop-lzo.jar包,单节点环境放到$SPARK_HOME/jars/目录即可,集群环境需要同步放到所有Master、Worker节点的Spark jars目录下。 - 提交PySpark任务时添加对应配置参数,命令行提交示例:
pyspark --jars /绝对路径/hadoop-lzo.jar --conf spark.io.compression.codecs=org.apache.hadoop.io.compress.LzoCodec,org.apache.spark.io.LZ4CompressionCodec,org.apache.spark.io.SnappyCompressionCodec - 代码中写入Parquet的逻辑不需要修改,保持
option("compression","lzo")即可。
Brotli编解码器配置步骤
- 下载匹配版本的
parquet-brotli.jar和hadoop-brotli.jar两个依赖包,同样同步到所有节点的Spark jars目录下。 - 提交任务时添加配置:
pyspark --jars /绝对路径/parquet-brotli.jar,/绝对路径/hadoop-brotli.jar --conf spark.io.compression.codecs=org.apache.hadoop.io.compress.BrotliCodec,org.apache.spark.io.LZ4CompressionCodec,org.apache.spark.io.SnappyCompressionCodec - 写入时指定
option("compression","brotli")即可。
配置验证
你可以在代码中先执行以下语句确认编解码器已注册成功:
print(spark.conf.get("spark.io.compression.codecs"))
如果输出的配置列表中包含你要使用的编解码器全类名,说明配置生效。
内容的提问来源于stack exchange,提问作者Techie Baba
相关产品推荐
相关产品推荐

