我正在运行来自this教程的scala代码。
val sc = new SparkContext(conf)
val data: RDD[Array[String]] = sc.textFile("pathToFile")
.map(line => {
val splits: Array[String] = line.trim.split(',')
})
我收到以下错误:
[错误]发现:单位[错误]
required:Array [String] [error]
})[错误]
^ [错误]发现一个错误[错误] (compile:compileIncremental)编译失败
答案 0 :(得分:3)
你创建了变量,但没有返回它。删除对变量的赋值,您将获得预期的数据类型。
-val splits: Array[String] = line.trim.split(',')
+line.trim.split(',')
答案 1 :(得分:0)
正如V先生所说,你没有回报价值。 Scala不需要显式的return语句,并将返回函数中的最后一个值。在您的情况下,虽然您正在为变量赋值。如果你摆脱了这个任务,scala会把它当作返回值。这意味着您可以使代码更加简洁:
val sc = new SparkContext(conf)
val data: RDD[Array[String]] = sc.textFile("pathToFile").map(_.trim.split(','))
_
中的.map(_.trim.split(','))
字符是传递给函数的参数的简写 - 在这种情况下,它与您在上面调用的line
相同。
您也不需要声明变量类型,但在使用RDD时,我发现它是一个有用的安全网来声明它。但是,您可以安全地从map函数中删除它,因为scala会检查它是否返回与RDD[Array[String]]
兼容的内容(正如我所说,它是可选的)。
答案 2 :(得分:-1)
嗨鲍勃尝试这种方式(因为scala推断类型)
val data = sc.textFile("pathToFile")
val splits = data.map(line => line.trim.split(','))