如何使用模式匹配过滤类型化的Spark数据集

时间:2017-11-15 15:17:57

标签: apache-spark apache-spark-dataset

我尝试跳过类型化的数据集API,但我仍然坚持使用过滤:

val ds: Dataset[(Int, Int)] = Seq((1,1)).toDS

ds.filter(ij => ij._1 > ij._2) // does work, but is not readable
ds.filter{case (i,j) => i<j} // does not work
  

错误:(36,14)缺少扩展函数的参数类型   必须完全知道匿名函数的参数类型。 (SLS 8.5)   预期的类型是:?

我不明白为什么模式匹配不适用于过滤器,而它适用于地图:

ds.map{case (i,j) => i+j}

3 个答案:

答案 0 :(得分:1)

明确指出:

ds.filter{x => x match { case (i,j) => i < j}}

答案 1 :(得分:1)

显然这是一个错误:https://issues.apache.org/jira/browse/SPARK-19492坦克向Bodgan提供信息

答案 2 :(得分:0)

这有点可读性:

val ds: Dataset[(Int, Int)] = Seq((1,1)).toDS
ds.filter('_1 > '_2)

注意:您需要导入spark.implicits._