无法在pyspark

时间:2018-04-06 15:49:21

标签: apache-spark pyspark lzo

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

1 个答案:

答案 0 :(得分:2)

我花了很长时间才找到解决方案。我从this answer中获取灵感并试图手工复制Maven对Java的作用。

以下是要遵循的步骤:

  1. 找到pyspark主文件夹:在Ubuntu上执行此操作的一种方法是从终端运行命令sudo updatedb;如果失败,请确保安装了pyspark并运行命令locate,然后再次尝试使用$pyspark_home/jars。 (确保选择正确的pyspark安装:您可能有多个,特别是如果您使用虚拟环境。)
  2. this maven repository下载hadoop-lzo jar并将其放在$pyspark_home/conf文件夹中。
  3. 创建文件夹core-site.xml
  4. 在此文件夹中,创建一个包含以下文本的<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]+)"
    
  5. 现在问题中的代码应该可以正常运行。