【问题标题】:Splitting fields from a CSV file using pyspark使用 pyspark 从 CSV 文件中拆分字段
【发布时间】:2019-12-11 22:32:23
【问题描述】:

我在通过 PySpark 拆分 CSV 文件时遇到问题。我正在尝试输出酒的国家和名称(这只是为了证明解析有效),但出现错误。

这是 CSV 文件的外观:

,国家,描述,名称,积分,价格,省份,region_1,region_2,品种,酒厂

20,美国,“Heitz 自 1961 年以来就用稀有的 Grignolino 葡萄酿制了这款一流的桃红葡萄酒。宝石红葡萄柚红色,带有草莓、西瓜、橙皮和咸味香料的味道,散发着浓郁的花香。”,Grignolino ,95,24.0,California,Napa Valley,Napa,Rosé,Heitz

这是我的代码

from pyspark import SparkConf, SparkContext

conf = SparkConf().setMaster("local").setAppName("SQLProject")
sc = SparkContext(conf = conf)


def parseLine(line):
    fields = line.split(',')
    country = fields[1]
    points = fields[4]
    return country, points


lines = sc.textFile("file:///Users/luisguillermo/IE/Spark/Final Project/wine-reviews/winemag-data-130k-v2.csv")
rdd = lines.map(parseLine)

results = rdd.collect()

for result in results:
    print(result)

并得到这个错误:

  File "/Users/luisguillermo/IE/Spark/Final Project/wine-reviews/country_and_points.py", line 10, in parseLine
    points = fields[4]
IndexError: list index out of range

由于描述中有逗号,程序似乎变得混乱。有关如何解决此问题的任何想法?

【问题讨论】:

  • 为什么不使用 spark 的内置 CSV 阅读器:spark.apache.org/docs/2.4.4/api/python/….
  • 可能有问题,因为你在,上拆分,并且你的描述中有,
  • 我同意@DrChess,为什么不为此使用适当的 csv 库?

标签: python csv apache-spark pyspark


【解决方案1】:

我建议使用 Spark 内置的 CSV 数据源,因为它提供了许多选项,包括用于从列中读取分隔符的 quotes,当然,带有分隔符的列应该用一些字符引用。

引用

当您有一列带有用于拆分列的分隔符时,请使用引号选项指定引号字符,默认情况下它是 ” 并且引号内的分隔符将被忽略。但是使用这个选项你可以设置任何字符。

如果您想阅读 Spark CSV 提供的其他选项以及示例,我建议您阅读以下文章。

spark-read-csv-file-into-dataframe

read-csv

学习愉快!!

【讨论】:

    【解决方案2】:

    查看此代码:

    df = spark.read\
        .csv('data.csv')
    
    df.printSchema()
    df.show()
    

    生成的 df 是一个 DataFrame,其列与 CSV 类似。 查看更多高级功能here

    【讨论】:

      猜你喜欢
      • 2018-09-25
      • 1970-01-01
      • 1970-01-01
      • 2013-03-12
      • 1970-01-01
      • 1970-01-01
      • 2019-12-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多