使用 Scala 从 Spark 的 withColumn 中调用 udf 时出错
Posted
技术标签:
【中文标题】使用 Scala 从 Spark 的 withColumn 中调用 udf 时出错【英文标题】:Error while calling udf from within withColumn in Spark using Scala 【发布时间】:2016-07-04 02:21:28 【问题描述】:我在使用 Scala 从 Spark 的 withColumn 中调用 udf 时收到错误消息。 使用 SBT 构建时会发生此错误。
val hiveRDD = sqlContext.sql("select * from iac_trinity.ctg_us_clickstream")
hiveRDD.persist()
val trnEventDf = hiveRDD
.withColumn("system_generated_id", getAuthId(hiveRDD("session_user_id")))
.withColumn("application_assigned_event_id", hiveRDD("event_event_id"))
val getAuthId = udf((session_user_id:String) =>
if (session_user_id != None)
if (session_user_id != "NULL")
if (session_user_id != "null")
session_user_id
else "-1"
else "-1"
else "-1"
)
我收到的错误是 -
scala:58: No TypeTag available for String
val getAuthId = udf((session_user_id:String) =>
当我使用 (session_user_id:Any) 而不是 (session_user_id:String) 时,它可以正确编译,但在运行时失败,因为在 Spark 中无法识别 Any。 请告诉我如何处理。
【问题讨论】:
错误与否这没有意义。String
类的对象不能是 None
!
【参考方案1】:
您是否尝试过明确您的类型?
udf[String, String]((session_user_id:String)...
【讨论】:
是的,我已经尝试过明确 - val getAuthId = udf[String,String]((session_user_id:String) => if (session_user_id == None) .... 错误是一样的 - scala:57: 没有可用于字符串的 TypeTag [错误] val getAuthId = udf[String,String]((session_user_id:String) => if (session_user_id == None)"-1" @preitamojha 你确定你正在执行你给我们的相同代码吗?这似乎不太可能不起作用。我无法重现错误。以上是关于使用 Scala 从 Spark 的 withColumn 中调用 udf 时出错的主要内容,如果未能解决你的问题,请参考以下文章
使用 Scala 从 Spark 的 withColumn 中调用 udf 时出错
Spark:使用 Spark Scala 从 Kafka 读取 Avro 消息