如何在pyspark中启用csv文件的多行读取

时间:2018-11-18 07:04:10

标签: python apache-spark pyspark apache-spark-sql rdd

我正在通过PySpark读取CSV文件。这是一个脱字符号分隔的文件。 它有5列。我只需要三列。

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()

2 个答案:

答案 0 :(得分:0)

在我的分析中,我知道,它无法通过sc.textFile()完成,其原因是,只要将s3文件加载到rdd,rdd就会将元素列表作为每条记录s3文件。在此级别本身,多行中的每一行都被分为不同的记录。因此无法通过sc.textFile()来实现。

答案 1 :(得分:0)

from pyspark.sql.session import SparkSession

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