不支持的文字类型类 scala.collection.immutable.Nil$ List()
Posted
技术标签:
【中文标题】不支持的文字类型类 scala.collection.immutable.Nil$ List()【英文标题】:Unsupported literal type class scala.collection.immutable.Nil$ List() 【发布时间】:2021-10-13 05:15:56 【问题描述】:我的 scala 代码是这样的。
def getFileName(fileName: String, postfixList: List[String]): String =
if (...)
return fileName + postfixList(0)
return fileName + postfixList(1)
val getFileNameUdf = udf(getFileName(_: String, _: List[String]): String)
def main(args: Array[String]): Unit =
val postfixList = List("a", "b")
val rawFsRecordDF = sparkSession.read.option("delimiter", "\t").schema(fsImageSchema)
.withColumn("fileName", getFileNameUdf(col("name"), lit(postfixList)))
对于每个列值,我想附加一个特定的后缀。
运行这段代码,我得到了
诊断:用户类抛出异常:java.lang.RuntimeException:
我应该如何将列表传递给 UDF 函数?
任何评论或链接将不胜感激!
【问题讨论】:
【参考方案1】:lit
适用于基本类型。对于参数化类型,您应该使用typedLit
。
val rawFsRecordDF = sparkSession.read.option("delimiter", "\t").schema(fsImageSchema)
.withColumn("fileName", getFileNameUdf(col("name"), typedLit(postfixList)))
应该可以。
【讨论】:
对于像我这样的初学者,我收到了value typedLit is not a member of object org.apache.spark.sql.functions
错误,这是一个版本问题。看来需要2.2.0+。以上是关于不支持的文字类型类 scala.collection.immutable.Nil$ List()的主要内容,如果未能解决你的问题,请参考以下文章
Spark:不支持的文字类型类 scala.collection.immutable.Nil$ List()