为什么mapFile上的map导致编译失败?

时间:2016-01-04 11:46:42

标签: scala apache-spark

我正在运行来自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)编译失败

3 个答案:

答案 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(','))