我正在用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中调用我的UDF吗?
发布于 2018-12-17 19:37:34
但是,当我尝试使用myUDF时,似乎callUDF函数只接受列而不是Dataset,谁能帮助我如何在UDF中将dataset作为输入参数传递。还有其他方法可以在Spark中调用我的UDF吗?
这里有几个问题。
首先,UDF是一个使用(内部的值) Columns的函数。从某种意义上说,您可以使用struct函数组合所需的列,以假装您使用整个数据集。
但是,如果您想使用整个数据集,那么您确实需要一个简单地接受数据集的纯Java/Scala方法。斯派克对此无能为力。它只是一个Java/Scala编程。
然而,有一个非常好的方法,我看不出有什么用处,即Dataset.transform
transform使用:用于链接自定义转换的DatasetU简明语法。
这允许链接接受数据集的方法,该数据集可以生成非常可读的代码(并且看起来完全符合您的要求)。
https://stackoverflow.com/questions/53805648
复制相似问题