Добавить столбец в dataframe, где меняется схема его строки - PullRequest
0 голосов
/ 10 октября 2019

Я хочу реализовать функцию udf в scala, где схема вывода функции udf изменяется в соответствии со столбцами ввода. Входной фрейм данных выглядит следующим образом:

+-----+-----------------------+-----------------------------------------------------------+
|id   |labels                 |words                                                      |
+-----+-----------------------+-----------------------------------------------------------+
|0    |["org", "date", "food"]|[["NASA"], ["7/2", "12 October"], ["apple","cherry","ice"]]|
|1    |["person", "event"]    |[["Jack", "Norah"], ["marathon", "olympics", "run"]]       |
+-----+-----------------------+-----------------------------------------------------------+

и в результате использования функции udf мне нужны разные схемы для каждой строки, желаемый результат - фрейм данных:

+-----+----------------------------------------------------------+
|id   |list                                                      |
+-----+----------------------------------------------------------+
|0    |[["NASA"],["7/2", "12 October"], ["apple","cherry","ice"]]|
|1    |[["Jack", "Norah"],["marathon", "olympics","run"]]        |
+-----+----------------------------------------------------------+

Here 'list'column аналогичен' words ', но схема отличается для обеих строк:

для первой строки, схема списка должна быть:

root
 |-- list: struct (nullable = true)
 |    |-- org: array (nullable = true)
 |    |    |-- element: string (containsNull = true)
 |    |-- date: array (nullable = true)
 |    |    |-- element: string (containsNull = true)
 |    |-- food: array (nullable = true)
 |    |    |-- element: string (containsNull = true)

и для второй строки:

root
 |-- list: struct (nullable = true)
 |    |-- person: array (nullable = true)
 |    |    |-- element: string (containsNull = true)
 |    |-- event: array (nullable = true)
 |    |    |-- element: string (containsNull = true)

Я попробовал решение из здесь и один другой подход, определив функцию udf, например:

val customUDF = udf((a: Array[String], b: Array[Array[String]]) => {myFunc(a, b)}, schema)

, где myFunc обновляет объект схемы, который определен глобально. Заранее спасибо.

...