Spark scala数据框udf返回行

wtt*_*ttt 6 scala user-defined-functions apache-spark

假设我有一个包含一列(称为colA)的数据帧,该列是行的seq.我想在每个colA记录中添加一个新字段.(并且新的文件与前一个记录有关,所以我必须写一个udf.)我应该怎么写这个udf?

我试图编写一个udf,它将colA作为输入,并输出Seq [Row],其中每个记录包含新的字段.但问题是udf无法返回Seq [Row] /异常是'Schema for type org.apache.spark.sql.Row不受支持'.我该怎么办?

我写的udf: val convert = udf[Seq[Row], Seq[Row]](blablabla...) 异常是java.lang.UnsupportedOperationException:不支持类型为org.apache.spark.sql.Row的Schema

Rap*_*oth 12

从spark 2.0开始,您可以创建返回Row/的UDF Seq[Row],但是您必须提供返回类型的模式,例如,如果您使用双精度数组:

val schema = ArrayType(DoubleType)

val myUDF = udf((s: Seq[Row]) => {
  s // just pass data without modification
}, schema)
Run Code Online (Sandbox Code Playgroud)

但我真的无法想象这有用的地方,我宁愿从UDF中返回元组或案例类(或其Seq).

编辑:如果您的行包含超过22个字段(元组/案例类的字段限制)可能很有用