Scala Spark数据加载问题
在spark shell中执行以下操作时,我获得了IndexOutOfBoundExceptionScala Spark数据加载问题,scala,apache-spark,Scala,Apache Spark,在spark shell中执行以下操作时,我获得了IndexOutOfBoundException val input = sc.textFile("demo.txt") b.collect 上述两个功能都工作正常 val out = input.map(_.split(",")).map(r => r(1)) 正在获取上述行的边界异常 demo.txt如下所示:(标题:-姓名、性别、年龄) 与猪相同的文件是没有任何问题的工作 您可以自己尝试,只需启动Scala控制台并输入示例行即可
val input = sc.textFile("demo.txt")
b.collect
上述两个功能都工作正常
val out = input.map(_.split(",")).map(r => r(1))
正在获取上述行的边界异常
demo.txt如下所示:(标题:-姓名、性别、年龄)
与猪相同的文件是没有任何问题的工作 您可以自己尝试,只需启动Scala控制台并输入示例行即可
scala> "Danial,,14".split(",")
res0: Array[String] = Array(Danial, "", 14)
scala> ",Male,18".split(",")
res1: Array[String] = Array("", Male, 18)
scala> "Hema,,".split(",")
res2: Array[String] = Array(Hema)
哎呀,最后一行不行了。添加要拆分的预期列数:
scala> "Hema,,".split(",", 3)
res3: Array[String] = Array(Hema, "", "")
或者更好,编写一个真正的解析器。String.split不适用于生产代码。什么是
b
?无论如何,你可能有一个空行<代码>b.filter(u.nonEmpty)输入错误!!键入b而不是“输入”。输入文件没有任何空行。即使在包含过滤条件后也会出现相同的错误:input.filter(.nonEmpty).map(.split(“,”).map(r=>r(1)).collectThank@Marius!!当我指定预期的列数时,它工作得很好。是的,同意你的观点自定义解析器是最好的解决方案。你也可以用-1代替3作为参数。
scala> "Hema,,".split(",", 3)
res3: Array[String] = Array(Hema, "", "")