我有一个以lzo格式压缩的csv文件,我想将它导入到pyspark数据帧中。如果文件没有压缩,我只会这样做:
import pyspark as ps
spark = ps.sql.SparkSession.builder.master("local[2]").getOrCreate()
data = spark.read.csv(fp, schema=SCHEMA, sep="\t")
文件路径fp
和架构SCHEMA
在其他地方正确定义。但是,当使用lzo压缩文件时,会返回填充了null
值的数据框。
我在我的机器上安装了lzop,可以从终端解压缩文件,然后使用pyspark导入它。但是,由于硬盘空间和时间限制(我有大量的lzo文件),这不是一个可行的解决方案。
答案 0 :(得分:2)
我花了很长时间才找到解决方案。我从this answer中获取灵感并试图手工复制Maven对Java的作用。
以下是要遵循的步骤:
sudo updatedb
;如果失败,请确保安装了pyspark并运行命令locate
,然后再次尝试使用$pyspark_home/jars
。 (确保选择正确的pyspark安装:您可能有多个,特别是如果您使用虚拟环境。)$pyspark_home/conf
文件夹中。core-site.xml
。在此文件夹中,创建一个包含以下文本的<configuration>
<property>
<name>io.compression.codecs</name>
<value>
org.apache.hadoop.io.compress.DefaultCodec,
com.hadoop.compression.lzo.LzoCodec,
com.hadoop.compression.lzo.LzopCodec,
org.apache.hadoop.io.compress.GzipCodec,
org.apache.hadoop.io.compress.BZip2Codec
</value>
</property>
<property>
<name>io.compression.codec.lzo.class</name>
<value>com.hadoop.compression.lzo.LzoCodec</value>
</property>
</configuration>
文件:
":\d\dZ\s\w+\s(?P<field1>[^\d]+)"
现在问题中的代码应该可以正常运行。