我有一个String数组,如下所示:
res17: Array[String] = Array(header - skip me, blk1|X|||||, a|b|c||||, d|e|f||||, x|y|z||||, blk2|X|||||, h|h|h|h|h|h|h, j|j|j|j|j|j|j, k|k|k|k|k|k|k, m|m|m|m|m|m|m, blk3|X|||||, 7|7|||||)
这是由SCALA程序获得的,而不是SPARK与SCALA:
for (line <- Source.fromFile(filename).getLines().drop(1).toVector) {
val values = line.split("\\|").map(_.trim)
...
当我表演时:
...
println(values(0), values(1), values(2)) // giving an error on 2 or indeed 1, if a null is found.
}
即。如果管道之间没有任何东西,它就会失败。
getOrElse无效,如何在检索或保存时替换“空值”?从文档中看不到。它一定很简单!
注意我只使用SCALA,而不是SPARK / SCALA。
提前致谢
答案 0 :(得分:1)
嗯,这不是我遇到的行为。这是一个截图,我可能会做一些不同的事情:
无论如何,如果你想摆脱你的空值,你可以运行如下所示的过滤器:
val values = s.split("\\|").map(_.trim).filterNot(_.isEmpty)
如果你不想摆脱,但你可以运行其他东西:
val values = s.split("\\|").map{x => val trimmed = x.trim; if (trimmed.isEmpty) None else Some(trimmed)}
修改强>:
val values = s.split("\\|").map{x => if (x == null) "" else x.trim}
编辑(再次):
我终于可以重现它,抱歉给我带来不便,我很想念一些东西。问题是split函数,它默认删除空值。您应该将第二个参数传递给split函数,如API
中所述val values = line.split("\\|", -1).map(_.trim)