[英]How to pass the whole row as an argument to an UDF in Spark (Java) without specifying every column?
[英]How to pass Row in UDF?
我正在用Java编写UDF。
我想对DateSet<Row>
执行更复杂的操作。 为此,我认为我需要将DataSet<Row>
作为输入传递到UDF并返回输出。 这是我的代码:
UDF1<Dataset<Row>,String> myUDF = new UDF1<Dataset<Row>,String>() {
public String call(Dataset<Row> input) throws Exception {
System.out.println(input);
return "test";
}
};
// Register the UDF with our SQLContext
spark.udf().register("myUDF", myUDF, DataTypes.StringType); {
但是当我去尝试使用myUDF时,似乎callUDF函数仅接受Column
而不是DataSet<Row>
。
谁能帮助我如何将DataSet<Row>
作为输入参数传递给UDF? 我还有其他方法可以在Spark SQL中调用UDF吗?
但是当我去尝试使用myUDF时,似乎callUDF函数仅接受列而不是Dataset,有人可以帮助我如何将数据集作为UDF中的输入参数传递。 还有什么其他方法可以在Spark SQL中调用UDF
这里有几个问题。
首先,UDF是与Columns
(内部的值)一起使用的函数。 从某种意义上讲,您可以使用struct
函数组合所需的列,以假装您使用整个数据集。
但是,如果您要使用整个数据集,则确实需要纯Java / Scala方法来简单地接受数据集。 Spark对此无能为力。 它只是Java / Scala编程。
但是,有一种非常不错的方法,我认为它没有太多使用,即Dataset.transform :
transform [U](t:(Dataset [T])⇒Dataset [U]):Dataset [U]用于链接自定义转换的简洁语法。
这就允许链接方法接受一个数据集,该数据集使代码非常可读(并且似乎正是您想要的)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.