首页 > 解决方案 > 如何在 pyspark 中启用 csv 文件的多行读取

问题描述

我正在通过 PySpark 读取 CSV 文件。它是一个插入符号分隔的文件。它有 5 列。我只需要它的 3 列。

rdd = sc.textFile("test.csv").map(lambda x: x.split("^")).filter(lambda x: len(x)>1).map(lambda x: (x[0], x[2], x[3]))

print rdd.take(5)

如下图所示,csv 文件中的数据在第 4 条记录处有一个多行数据,最后只有一列。因此,尽管该文件只有 5 条记录,但 spark 将其视为 6 条记录。所以我面临索引超出范围错误。

file.csv 中的数据:

a1^b1^c1^d1^e1
a2^b2^c2^d2^e2
a3^b3^c3^d3^e3
a4^b4^c4^d4 is 
multiline^e4
a5^b5^c5^d5^e5

如何multiline在创建rdd过程中启用sc.textFile()

标签: pythonapache-sparkpysparkapache-spark-sqlrdd

解决方案


from pyspark.sql.session import SparkSession

spark = SparkSession(sc)
rdd = spark.read.csv("csv.csv", multiLine=True, header="False",sep = "^", escape= "\"")

推荐阅读