我正在为具有大量内部结构的复杂JSON数据集编写过滤函数.传递单个列太麻烦了.
所以我声明了以下UDF:
val records:DataFrame = = sqlContext.jsonFile("...")
def myFilterFunction(r:Row):Boolean=???
sqlc.udf.register("myFilter", (r:Row)=>myFilterFunction(r))
Run Code Online (Sandbox Code Playgroud)
直觉我觉得它会像这样工作:
records.filter("myFilter(*)=true")
Run Code Online (Sandbox Code Playgroud)
实际的语法是什么?
关于隐式类的东西,混淆reduce().在隐式类内部时,编译器会在reduce()第二个参数上抱怨.但是当相同的代码在非隐式方法中时,它编译并正常工作.
我对隐含类缺少什么?
object ImpliCurri {
implicit class MySeq[Int](val l: Seq[Int]) {
//not compiling
final def mapSum(f:Int=>Int):Int = {
l.map(x=>f(x)).reduce(_+_)
//compile error on reduce: Type mismatch. Expected String, fount Int
}
}
// works fine
def mySum(l:Seq[Int], f:Int=>Int):Int = {
l.map(x=>f(x)).reduce(_+_)
// compiles and works no issues
}
}
Run Code Online (Sandbox Code Playgroud)