scala - 错误:')'预期但是'('找到了

时间:2017-11-28 13:19:37

标签: scala

我是Scala的新手,我无法找出导致此错误的原因,我搜索过类似的主题,但不幸的是,这些主题都没有对我有用。我有一个简单的代码,可以从一些README.md文件中找到包含最多单词的行。我写的代码是:

k = (x+2) [(!is.na(x)) & x>0]

,错误是:

    val readme = sc.textFile("/PATH/TO/README.md")
    readme.map(lambda line :len(line.split())).reduce(lambda a, b: a if (a > b) else b)

1 个答案:

答案 0 :(得分:2)

您的代码无效 Scala

我认为您可能要做的是使用 Spark 确定 README 文件中单行上的最大字数。是对的吗?如果是这样,那么你可能想要这样的东西:

val readme = sc.textFile("/PATH/TO/README.md")
readme.map(_.split(' ').length).reduce(Math.max)

最后一行使用了一些参数缩写。这个替代版本是等价的,但更明确一点:

readme.map(line => line.split(' ').length).reduce((a, b) => Math.max(a, b))

map函数将RDD String个{文件中的每一行]转换为RDD Int个(字数)在一行上,在这个特殊情况下,用空格分隔。然后reduce函数返回其两个参数的最大值 - 这将最终产生一个Int值,表示文件单行上最大数量的元素。

重新阅读你的问题后,似乎你可能想知道最多单词的行,而不是有多少单词。这有点棘手,但这应该可以解决问题:

readme.map(line => (line.split(' ').length, line)).reduce((a, b) => if(a._1 > b._1) a else b)._2

现在map创建RDD元组 (Int, String),其中第一个值是该行上的字数,第二个是这条线本身。 reduce然后保留其两个元组参数中较大的整数值中的任何一个(._1指向元组的第一个元素)。由于结果是一个元组,我们然后使用._2来检索相应的行(元组的第二个元素)。

我建议你阅读一本关于 Scala 的好书,例如Odersky,Spoon&撰写的 Scala编程,第3版。凡纳斯。主tutorials and an overview of the language上还有一些Scala language site Coursera 还有一些您可能想要注册的免费 Scala 培训课程。