假设我有一个数据框,其中包含一列(称为colA),该列是行的序列。我想向colA的每个记录追加一个新字段。 (并且新文件与前一个记录相关联,因此我必须编写一个udf。)
我应该怎么写这个udf?

我尝试编写一个以colA作为输入并输出Seq [Row]的udf,其中每个记录都包含新字段。但是问题是udf无法返回Seq [Row]/异常(exception)是“不支持org.apache.spark.sql.Row类型的模式”。
我应该怎么办?

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

最佳答案

从spark 2.0开始,您可以创建返回Row/Seq[Row]的UDF,但必须提供返回类型的架构,例如如果您使用Doubles数组:

val schema = ArrayType(DoubleType)

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

但是我真的无法想象这在哪里有用,我宁愿从UDF返回元组或案例类(或其Seq)。

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

关于scala - Spark Scala数据框udf返回行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49714067/

10-14 23:22