Scala / Spark函数上()和{}之间的区别

时间:2018-10-20 13:24:53

标签: scala apache-spark

最近,我在spark中遇到一个示例,并在spark shell上进行了尝试。数据集如下:

  

pollock,Divito

     

波洛克,迪维奥

     

里查德,国王

     

理查德国王

下面是代码摘录:

val loadFileRDD = sc.textFile("dataset.csv")
val namePairRDD = loadFileRDD.map(_.split(",")).map(split => (split(0), split(1)))
val sortedRDD = namePairRDD.groupByKey(2).mapValues(_.toList.sorted)
val pairPerLineRDD = sortedRDD.flatMap{case(lastName, firstNameList) => firstNameList.map(firstName => (lastName,firstName))}

在最后一行中,flatMap后跟{},并带有case(lastName,firstNameList)。我在这里有2个疑问:-

  1. 为什么我不能简单地在flatMap中使用(lastName,firstNameList)而不是case(lastName,firstNameList)?
  2. 当我在flatMap中使用()而不是 {} 时,为什么shell会抛出“简单表达式的非法开头”错误?

我知道以下语法:

Seq(1,2,3,4) flatMap { x => Seq(x, -x) }

但这也可以正常工作:

Seq(1,2,3,4) flatMap ( x => Seq(x, -x) )

请澄清疑问。谢谢。

0 个答案:

没有答案