繁体   English   中英

如何在UDF中传递Row?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM