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