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



如何在 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

相关内容

  • 没有找到相关文章

最新更新