You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PySpark导入LZO压缩CSV文件返回全Null值问题求助

解决PySpark读取LZO压缩CSV/TSV文件返回全Null的问题

我来帮你搞定这个LZO压缩文件读取的坑!你遇到的全Null问题,核心原因是PySpark默认没有内置LZO压缩的支持——虽然你本地装了lzop命令行工具,但Spark依赖的是Java实现的Hadoop LZO编解码器,和系统的lzop不是一回事。下面是具体的解决步骤:

1. 先搞定Spark的LZO依赖包

Spark本身不带LZO编解码器,你需要添加hadoop-lzo的jar包到Spark的类路径中:

  • 如果是本地开发环境:下载和你的Spark依赖的Hadoop版本匹配的hadoop-lzo jar(比如对应版本的com.hadoop.gplcompression:hadoop-lzo),放到Spark安装目录的jars文件夹里。
  • 如果是通过命令行启动PySpark:可以用--jars参数指定jar路径,比如pyspark --jars /path/to/hadoop-lzo.jar。

2. 配置SparkSession启用LZO编解码器

在创建SparkSession的时候,需要添加Hadoop压缩相关的配置,让Spark能识别LZO格式:

import pyspark as ps
from pyspark.conf import SparkConf

# 配置支持LZO的压缩编解码器
conf = SparkConf()
conf.set("spark.hadoop.io.compression.codecs", 
         "org.apache.hadoop.io.compress.GzipCodec,"
         "org.apache.hadoop.io.compress.DefaultCodec,"
         "org.apache.hadoop.io.compress.BZip2Codec,"
         "com.hadoop.compression.lzo.LzoCodec,"
         "com.hadoop.compression.lzo.LzopCodec")
conf.set("spark.hadoop.io.compression.codec.lzo.class", "com.hadoop.compression.lzo.LzopCodec")

# 创建带配置的SparkSession
spark = ps.sql.SparkSession.builder.master("local[2]").config(conf=conf).getOrCreate()

3. 正常读取压缩文件

确保你的LZO压缩文件后缀是.lzo(比如data.tsv.lzo),这样Spark会自动识别压缩格式,然后就可以用你原来的读取代码了:

# 读取LZO压缩的TSV文件(schema和文件路径保持你原来的定义)
data = spark.read.csv(fp, schema=SCHEMA, sep="\t")

# 验证数据是否正常加载
data.show()

额外小提示

如果你的压缩文件没有.lzo后缀,也可以尝试手动指定压缩格式,但Spark的csv读取器的compression参数可能不直接支持lzo——所以最稳妥的方式还是给文件加上.lzo后缀,让Spark自动匹配编解码器。

内容的提问来源于stack exchange,提问作者Gianluca Micchi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:35:01