udf时失败

mkh04yzy  于 2021-05-29  发布在  Spark
关注(0)|答案(1)|浏览(486)

我在scala和sparksql中工作,我想调用接受多个参数的udf。我不知道我的电话怎么了
自定义项是

private def parseJsonUdf: UserDefinedFunction = udf(parseJson _)
def parseJson (json: org.json.JSONObject, arg1: String, arg2: String = ""): String = {

***

}

我这样称呼它,这里的字段是seq[string],数据列包含json字符串

for(field <- fields){
 df.withColumn(field, parseJsonUdf(col("data"), lit(field)))
}

可能我不知道如何将字符串作为jsonobject传递到udf或其他内容中。我得到下面的运行时错误

java.lang.ClassCastException:********$$parseJsonUdf$1 cannot be cast to scala.Function2

    at org.apache.spark.sql.catalyst.expressions.ScalaUDF.<init>(ScalaUDF.scala:107)
    at org.apache.spark.sql.expressions.UserDefinedFunction.apply(UserDefinedFunction.scala:71)

我该怎么做?

f4t66c6m

f4t66c6m1#

试试下面(天真的方法)-

private def parseJsonUdf: UserDefinedFunction = udf(parseJson _)
def parseJson (jsonString: String, arg1: String, arg2: String = ""): String = {
val jsonObj:org.json.JSONObject = // parse  jsonString -> JSONObject

***

}

那就打电话-

for(field <- fields){
 df.withColumn(field, parseJsonUdf(col("data"), lit(field), lit("")))
}

相关问题