the*_*ing 1 scala apache-spark
我在Key Value配对中有数据.我试图将过滤函数应用于看起来像这样的数据:
def filterNum(x: Int) : Boolean = {
if (decimalArr.contains(x)) return true
else return false
}
Run Code Online (Sandbox Code Playgroud)
我的Spark代码有:
val numRDD = columnRDD.filter(x => filterNum(x(0)))
Run Code Online (Sandbox Code Playgroud)
但那不会工作,当我发送:
val numRDD = columnRDD.filter(x => filterNum(x))
Run Code Online (Sandbox Code Playgroud)
我收到错误:
<console>:23: error: type mismatch;
found : (Int, String)
required: Int
val numRDD = columnRDD.filter(x => filterNum(x))
Run Code Online (Sandbox Code Playgroud)
我也试图做其他事情,比如改变函数的输入
这是因为RDD.filter
传入Key-Value Tuple,(Int, String)
并且filterNum期望a Int
,这就是第一次尝试的原因:tuple(index)
拉出元组的索引处的值.
您可以将过滤器功能更改为
def filterNum(x: (Int, String)) : Boolean = {
if (decimalArr.contains(x._1)) return true
else return false
}
Run Code Online (Sandbox Code Playgroud)
虽然,我个人会做一个更简洁的版本,因为假的被烘焙到contains
你可以直接使用表达式:
columnRDD.filter(decimalArr.contains(_._1))
Run Code Online (Sandbox Code Playgroud)
或者,如果您不喜欢下划线语法:
columnRDD.filter(x=>decimalArr.contains(x._1))
Run Code Online (Sandbox Code Playgroud)
另外,不要return
在scala中使用,最后评估的行是自动返回
归档时间: |
|
查看次数: |
10659 次 |
最近记录: |