使用 pyspark 从 CSV 文件中拆分字段
Posted
技术标签:
【中文标题】使用 pyspark 从 CSV 文件中拆分字段【英文标题】:Splitting fields from a CSV file using pyspark 【发布时间】: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 库?
【参考方案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
【讨论】:
以上是关于使用 pyspark 从 CSV 文件中拆分字段的主要内容,如果未能解决你的问题,请参考以下文章