Как пройти Роу в UDF? - PullRequest
       5

Как пройти Роу в UDF?

0 голосов
/ 16 декабря 2018

Я пишу UDF на Java.

Я бы хотел выполнить более сложную операцию на 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?Есть ли другой способ вызвать мой UDF в Spark SQL?

1 Ответ

0 голосов
/ 17 декабря 2018

Но когда я иду и пытаюсь использовать myUDF, кажется, что функция callUDF принимает только столбец, а не набор данных. Может ли кто-нибудь помочь, как я могу передать набор данных в качестве входного параметра в UDF.Есть ли другой способ вызвать мой UDF в Spark SQL

Здесь есть несколько вопросов.

Прежде всего, UDF - это функция, с которой работают (значениявнутри) Columns.В некотором смысле, вы можете использовать функцию struct, чтобы объединить необходимые столбцы, притворяясь, что вы работаете со всем набором данных.

Если вы хотите работать со всем набором данных, вам действительно нужен чистый Java / Scala методэто просто принимает набор данных.Спарк мало что может с этим поделать.Это просто программирование на Java / Scala.

Однако есть очень хороший метод, который я не вижу большого применения, например: Dataset.transform :

transform [U] (t: (Набор данных [T]) ⇒ Набор данных [U]): Набор данных [U] Краткий синтаксис для создания цепочки пользовательских преобразований.

Это позволяет создавать цепочкиметоды, которые принимают набор данных, который делает код очень читабельным (и кажется именно тем, что вы хотите).

...