Scala 作为参数传递的空参数函数

Scala 作为参数传递的空参数函数,scala,apache-spark,Scala,Apache Spark,以下是两个用作自定义项的函数: def nextString(): String = Random.nextString(10) def plusOne(a: Int): Int = a + 1 def udfString = udf(nextString) def udfInt = udf(plusOne) 如果我尝试使用withColumn,myUDF1将可以很好地使用udfInt,但是抛出:不能在模式中使用Char作为udfString 可能是因为它对udfInt类型使用(Int)=>

以下是两个用作自定义项的函数:

def nextString(): String = Random.nextString(10)
def plusOne(a: Int): Int = a + 1

def udfString = udf(nextString)
def udfInt = udf(plusOne)
如果我尝试使用withColumn,myUDF1将可以很好地使用udfInt,但是抛出:不能在模式中使用Char作为udfString

可能是因为它对udfInt类型使用(Int)=>(Int),这是udf所期望的

但将nextString视为类型String,这显然导致了一种假设,即我在应用函数时试图提取字符

如果我这样做,它会起作用:

def myUDF: () => String = udf(() => nextString)

对于这么简单的事情来说,这看起来很难看。有没有办法将udfString作为函数而不是字符串传递?

编写以下代码时:

def udfString = udf(nextString)
这和写作一样

val s = nextString
def udfString = udf(s)
之所以编译,是因为字符串也是
Int=>Char
的函数(请参阅)

您可以通过以下方式告知编译器您正在向udf传递函数:

def udfString = udf(nextString _)

我只需要执行
defudfstring=udf(()=>Random.nextString(10))