Scala udf UnsupportedOperationException
Posted
技术标签:
【中文标题】Scala udf UnsupportedOperationException【英文标题】: 【发布时间】:2020-12-03 01:03:43 【问题描述】:我有一个用 scala 编写的数据框 a2:
val a3 = a2.select(printme.apply(col(“PlayerReference”)))
PlayerReference 列包含一个字符串。
调用 udf 函数:
val printme = udf(
st: String =>
val x = new JustPrint(st)
x.printMe();
)
这个 udf 函数调用一个 java 类:
public class JustPrint
private String ss = null;
public JustPrint(String ss)
this.ss = ss;
public void printMe()
System.out.println("Value : " + this.ss);
但我对 udf 有此错误:
java.lang.UnsupportedOperationException: Schema for type Unit is not supported
本练习的目标是验证调用链。 我应该怎么做才能解决这个问题?
【问题讨论】:
您的 UDF 返回Unit
方法 printMe()
具有 void
返回类型,即 Unit
在 scala 中键入。在spark
用户定义函数中应该返回non-Unit
类型。如果要打印一些数据,或许使用Dataframe
show
比较好。
【参考方案1】:
您收到此错误的原因是您的 UDF 没有返回任何内容,就 spark 而言,这称为 Unit。
您应该做什么取决于您实际想要什么,但是,假设您只想跟踪通过 UDF 传递的值,您应该更改 printMe 以使其返回字符串,或者更改 UDF。 像这样:
public String printMe()
System.out.println("Value : " + this.ss);
return this.ss;
或者像这样:
val printme = udf(
st: String =>
val x = new JustPrint(st)
x.printMe();
x
)
【讨论】:
以上是关于Scala udf UnsupportedOperationException的主要内容,如果未能解决你的问题,请参考以下文章