首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在UDF如何通过Row?

问在UDF如何通过Row?
EN

Stack Overflow用户
提问于 2018-12-16 19:20:24
回答 1查看 1.5K关注 0票数 1

我正在用Java编写一个UDF。

我想在DateSet<Row>上执行一个更复杂的操作。为此,我认为需要将DataSet<Row>作为UDF的输入并返回输出。这是我的代码:

代码语言:javascript
复制
 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吗?

EN

回答 1

Stack Overflow用户

发布于 2018-12-17 19:37:34

但是,当我尝试使用myUDF时,似乎callUDF函数只接受列而不是Dataset,谁能帮助我如何在UDF中将dataset作为输入参数传递。还有其他方法可以在Spark中调用我的UDF吗?

这里有几个问题。

首先,UDF是一个使用(内部的值) Columns的函数。从某种意义上说,您可以使用struct函数组合所需的列,以假装您使用整个数据集。

但是,如果您想使用整个数据集,那么您确实需要一个简单地接受数据集的纯Java/Scala方法。斯派克对此无能为力。它只是一个Java/Scala编程。

然而,有一个非常好的方法,我看不出有什么用处,即Dataset.transform

transform使用:用于链接自定义转换的DatasetU简明语法。

这允许链接接受数据集的方法,该数据集可以生成非常可读的代码(并且看起来完全符合您的要求)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53805648

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档