簡體   English   中英

如何使用反射從scala調用spark UDF?

[英]How to call spark UDF from scala using reflection?

我正在構建一個依賴於 java 庫的 spark 應用程序。 公開的 Java 接口是

String doSomething(String, Map<String,String>)

我創建了一個 UDF 作為

def myfunc(properties: Map[String, String]) = udf((data: String) => {
    ...
    doSomething(data,properties)
})

這個函數可以從 spark shell 中調用為myfunc(properties)(data) ,其中屬性是一個地圖,數據是列類型。

問題是我需要通過 Scala 文件的反射來調用它。 我需要做這樣的事情:

val c = Class.forName("package.class")
val m = c.getMethod("myfunc",classOf[Map[String,String]])
m.invoke(c.newInstance, someMap)

m.invoke 返回函數本身。 如何以及在何處傳遞 Column 參數? 或者有沒有其他方法可以將這些屬性映射傳遞給觸發 UDF,以便可以通過反射直接調用它?

嘗試

m.invoke(c.newInstance, someMap).asInstanceOf[UserDefinedFunction].apply(data)

對於Column類型的data

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM