【发布时间】:2020-10-09 04:45:41
【问题描述】:
我在 Scala 和 spark sql 中工作,我想在其中调用带有多个参数的 UDF。我无法弄清楚我的电话出了什么问题
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)))
}
可能我不知道如何在 udf 或其他东西中将字符串作为 JSONOBJECT 传递。我收到以下运行时错误
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)
我怎样才能让它工作?
【问题讨论】:
-
尝试将第三个参数设为
lit("") -
需要更多关于“数据”列的外观以及“数据”列的类型的信息。
-
@SathiyanS:数据列的类型是字符串,里面的数据是json字符串。
-
@SomeshwarKale:当我添加第三个 arg -lit("") 时,我收到此错误 java.lang.String cannot be cast to org.json.JSONObject
-
只需将其作为字符串传递,然后在 UDF 中将其转换为
JSONObject,然后随心所欲。
标签: json scala dataframe apache-spark user-defined-functions