【发布时间】:2021-03-30 06:31:29
【问题描述】:
我正在尝试在 spark 中读取多行 csv 文件。我的模式是:ID、名称和标记。 我的输入和实际输出如下所示。我没有得到预期的输出。有人可以帮助我在我的代码中缺少什么。
代码:
val myMarkDF = spark
.read
.format("csv")
.option("path","mypath\\marks.csv")
.option("inferSchema","true")
.option("multiLine","true")
.option("delimiter",",")
.load
输入:
1,A,
97,,
1,A,98
1,A,
99,,
2,B,100
2,B,95
实际输出:
+---+----+----+
|_c0| _c1| _c2|
+---+----+----+
| 1| A|null|
| 97|null|null|
| 1| A| 98|
| 1| A|null|
| 99|null|null|
| 2| B| 100|
| 2| B| 95|
+---+----+----+
预期输出:
+---+----+----+
|_c0| _c1| _c2|
+---+----+----+
| 1| A| 97|
| 1| A| 98|
| 1| A| 99|
| 2| B| 100|
| 2| B| 95|
+---+----+----+
谢谢!
【问题讨论】:
-
也许你需要额外的选项here
-
感谢您调查我的问题。但不幸的是,在添加了 parserlib 选项后,它仍然没有给出预期的 o/p。
-
这是一个猜测。我有一段时间没有使用火花了。如果有必要在阅读器之外将多行 csv 转换为单行,我不会为此使用 spark,因为相邻的行可能不在同一个工作人员上。基本上,您在数据帧/rdd 中失去了邻接关系。
-
绝对正确,我只是在试验。
-
3 个问题:同一条记录可以显示在 3 行上,一行可以包含多于 1 条记录吗?您的样本记录总是在第 3 列被破坏,这是否会发生在第 2 列,例如,第一行是
1,,而第二行是A,97,?请添加所有可能的案例。
标签: scala csv apache-spark