无法在pyspark中导入lzo文件

詹卢卡·米奇(Gianluca Micchi)

我有一个以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文件),这不是可行的解决方案。

詹卢卡·米奇(Gianluca Micchi)

我花了很长时间,但找到了解决方案。我从这个答案中得到了启发,并试图手工再现Maven对Java所做的工作。

这些是要遵循的步骤:

  1. 找到pyspark主文件夹:在Ubuntu上执行此操作的一种方法是从终端运行命令locate pyspark/find_spark_home.py如果失败,请确保已安装pyspark并运行命令,sudo updatedb然后再尝试使用locate(确保选择正确的pyspark安装:您可能有多个安装,尤其是在使用虚拟环境的情况下。)
  2. 该Maven存储库下载hadoop-lzo jar ,并将其放在$pyspark_home/jars文件夹中。
  3. 创建文件夹$pyspark_home/conf
  4. 在此文件夹中,创建一个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>
    

现在问题中的代码应该可以正常工作。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章