Spark scala数据框udf返回行

假设我有一个包含一列(称为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

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

val schema = ArrayType(DoubleType)

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

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

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

转载注明原文:Spark scala数据框udf返回行 - 代码日志