【问题标题】:Can't import lzo files in pyspark无法在 pyspark 中导入 lzo 文件
【发布时间】:2018-04-06 15:49:20
【问题描述】:

我有一个以 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 文件)。

【问题讨论】:

    标签: apache-spark pyspark lzo


    【解决方案1】:

    我花了很长时间,但我找到了解决方案。我从this answer 中获得灵感,并尝试手动重现 Maven 对 Java 所做的事情。

    这些是要遵循的步骤:

    1. 找到 pyspark 主文件夹:在 Ubuntu 上执行此操作的一种方法是从终端运行命令 locate pyspark/find_spark_home.py;如果失败,请确保您已安装 pyspark 并运行命令 sudo updatedb,然后再次尝试使用 locate。 (确保您选择了正确的 pyspark 安装:您可能拥有多个,尤其是在您使用虚拟环境时。)
    2. this maven repository 下载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>
      

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

    【讨论】:

    • 我在这里尝试使用您的方法,但在创建 core-site.xml 时得到以下信息:ERROR GPLNativeCodeLoader: Could not load native gpl library java.lang.UnsatisfiedLinkError: no gplcompression in java.library.path
    猜你喜欢
    • 2019-07-14
    • 2020-06-07
    • 2021-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-12
    相关资源
    最近更新 更多