Spark键/值过滤器功能

时间:2015-06-01 15:50:35

标签: scala apache-spark

我在键值配对中有数据。我试图将过滤函数应用于看起来像这样的数据:

  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))

我也试图做其他事情,比如改变功能的输入

1 个答案:

答案 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,最后一个评估的行是自动返回