Но когда я иду и пытаюсь использовать myUDF, кажется, что функция callUDF принимает только столбец, а не набор данных. Может ли кто-нибудь помочь, как я могу передать набор данных в качестве входного параметра в UDF.Есть ли другой способ вызвать мой UDF в Spark SQL
Здесь есть несколько вопросов.
Прежде всего, UDF - это функция, с которой работают (значениявнутри) Columns
.В некотором смысле, вы можете использовать функцию struct
, чтобы объединить необходимые столбцы, притворяясь, что вы работаете со всем набором данных.
Если вы хотите работать со всем набором данных, вам действительно нужен чистый Java / Scala методэто просто принимает набор данных.Спарк мало что может с этим поделать.Это просто программирование на Java / Scala.
Однако есть очень хороший метод, который я не вижу большого применения, например: Dataset.transform :
transform [U] (t: (Набор данных [T]) ⇒ Набор данных [U]): Набор данных [U] Краткий синтаксис для создания цепочки пользовательских преобразований.
Это позволяет создавать цепочкиметоды, которые принимают набор данных, который делает код очень читабельным (и кажется именно тем, что вы хотите).