如何在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
如何使它起作用?
答案 0 :(得分:2)
将各种注释结合起来可以作为一种可能的解决方案:
def myFilter = (predicate: (Column, Int) => Column)(df: DataFrame) = {
df.filter(predicate(col("value"), 2))
}
df.transform(myFilter(_ > _)).show