我在键值配对中有数据。我试图将过滤函数应用于看起来像这样的数据:
def filterNum(x: Int) : Boolean = {
if (decimalArr.contains(x)) return true
else return false
}
我的Spark代码包含:
val numRDD = columnRDD.filter(x => filterNum(x(0)))
但是当我发送时,这不会起作用:
val numRDD = columnRDD.filter(x => filterNum(x))
我收到错误:
<console>:23: error: type mismatch;
found : (Int, String)
required: Int
val numRDD = columnRDD.filter(x => filterNum(x))
我也试图做其他事情,比如改变功能的输入
答案 0 :(得分:7)
这是因为RDD.filter
传递了键值元组(Int, String)
,而filterNum期待Int
,这就是第一次尝试有效的原因:tuple(index)
拉出元组的索引处的值。
您可以将过滤功能更改为
def filterNum(x: (Int, String)) : Boolean = {
if (decimalArr.contains(x._1)) return true
else return false
}
虽然,我个人会做一个更简洁的版本,因为假的内容被contains
加入,你可以直接使用这个表达式:
columnRDD.filter(decimalArr.contains(_._1))
或者,如果您不喜欢下划线语法:
columnRDD.filter(x=>decimalArr.contains(x._1))
另外,不要在scala中使用return
,最后一个评估的行是自动返回