【发布时间】:2018-11-18 07:04:10
【问题描述】:
我正在通过 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
如何在创建rdd 到sc.textFile() 时启用multiline?
【问题讨论】:
-
当我们将 rdd 创建为 spark.read.csv.option("multiLine", "true").('file.csv') 时,我在网上看到了启用多行的示例但我不能为 sc.textFile() 找到任何地方
-
您的意思是您只想从文本文件中读取 5 列?
-
让我们说如下所述,一个文件中有 5 列,只有 4 条记录。我只读最后一列。如果您看到最后一条记录在最后但一列中有多行。因此,我收到了一个错误。
a1^b1^c1^d1^e1 a2^b2^c2^d2^e2 a3^b3^c3^d3^e3 a4^b4^c4^d4 is very lenghty^e4 -
@Sri - 你的问题不清楚。您能否请edit您的问题,并使用输入样本和预期输出更新您的问题。您正在运行的代码和代码输出。
-
@Sri - 你为什么希望使用
sc.textFile/rdd而不是使用spark.read.csv.option("multiLine", "true").('file.csv')?
标签: python apache-spark pyspark apache-spark-sql rdd