我是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)
答案 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 培训课程。