具有高阶功能的火花过滤器

时间:2019-01-30 11:57:42

标签: scala apache-spark apache-spark-sql

如何在Scala中获得更高阶的函数以正确接受火花过滤器谓词? 即

val df = Seq(1,2,3,4).toDF("value")

df.filter(col("value")> 2).show
df.filter(col("value")< 2).show

工作正常。但是,当我尝试将其重构为接受过滤谓词的函数(请注意:与>运算符相同的签名)时,编译器将不再找到要提交给谓词的左/右部分。

def myFilter =(predicate:Any =>Column)(df:DataFrame)= {
df.filter(col("value") predicate 2).show // WARN this does not compile
}

df.transform(myFilter(>)).show

如何使它起作用?

1 个答案:

答案 0 :(得分:2)

将各种注释结合起来可以作为一种可能的解决方案:

def myFilter = (predicate: (Column, Int) => Column)(df: DataFrame) = {
  df.filter(predicate(col("value"), 2))
}

df.transform(myFilter(_ > _)).show