不支持的文字类型类 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()

PHP加水印代码 支持文字和图片水印

搭配 IconFont 在 WPF 中使用文字图片

在 TypeScript 中使用类型变量访问对象文字不起作用

ES6类文字中的IIFE

测试:语音转文字的体验