无法在pyspark中导入lzo文件
Can't import lzo files in pyspark
我有一个以 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 压缩时,这个 returns 一个数据帧充满了 null
个值。
我已经在我的机器上安装了 lzop,可以从终端解压缩文件,然后使用 pyspark 导入它。但是,由于硬盘 space 和时间限制(我有大量 lzo 文件),这不是一个可行的解决方案。
我花了很长时间,但我找到了解决办法。我从 中获得灵感,并尝试手动重现 Maven 使用 Java 所做的事情。
这些是要遵循的步骤:
- 找到 pyspark 主文件夹:在 Ubuntu 上执行此操作的一种方法是从终端 运行 命令
locate pyspark/find_spark_home.py
;如果失败,请确保在再次尝试使用 locate
之前安装了 pyspark 和 运行 命令 sudo updatedb
。 (确保 select 正确安装了 pyspark:您可能有多个,尤其是在使用虚拟环境时。)
- 从 this maven repository 下载 hadoop-lzo jar 并将其放入
$pyspark_home/jars
文件夹。
- 创建文件夹
$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>
现在问题中的代码应该可以正常工作了。
我有一个以 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 压缩时,这个 returns 一个数据帧充满了 null
个值。
我已经在我的机器上安装了 lzop,可以从终端解压缩文件,然后使用 pyspark 导入它。但是,由于硬盘 space 和时间限制(我有大量 lzo 文件),这不是一个可行的解决方案。
我花了很长时间,但我找到了解决办法。我从
这些是要遵循的步骤:
- 找到 pyspark 主文件夹:在 Ubuntu 上执行此操作的一种方法是从终端 运行 命令
locate pyspark/find_spark_home.py
;如果失败,请确保在再次尝试使用locate
之前安装了 pyspark 和 运行 命令sudo updatedb
。 (确保 select 正确安装了 pyspark:您可能有多个,尤其是在使用虚拟环境时。) - 从 this maven repository 下载 hadoop-lzo jar 并将其放入
$pyspark_home/jars
文件夹。 - 创建文件夹
$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>
现在问题中的代码应该可以正常工作了。