Сложность в том, что я стараюсь избегать UDF как можно больше.
У меня есть набор данных "wordsDS", который содержит много нулевых значений:
+------+------+------+------+
|word_0|word_1|word_2|word_3|
+------+------+------+------+
| a| b| null| d|
| null| f| m| null|
| null| null| d| null|
+--------------+------+-----|
Мне нужно собрать все столбцы для каждой строки в массиве . Я не знаю количество столбцов заранее, поэтому я использую метод columns ().
groupedQueries = wordsDS.withColumn("collected",
functions.array(Arrays.stream(wordsDS.columns())
.map(functions::col).toArray(Column[]::new)));;
Но при таком подходе создаются пустые элементы :
+--------------------+
| collected|
+--------------------+
| [a, b,,d]|
| [, f, m,,]|
| [,, d,,]|
+--------------------+
Вместо этого мне нужен следующий результат:
+--------------------+
| collected|
+--------------------+
| [a, b, d]|
| [f, m]|
| [d]|
+--------------------+
Таким образом, в основном мне нужно собрать все столбцы для каждой строки в массив со следующими требованиями:
- Результирующий массив не содержит пустых элементов.
- Не знаю количество столбцов заранее.
Я также придерживался подхода фильтрацииСтолбец набора данных для пустых значений, но не может предложить ничего другого, кроме UDF. Я стараюсь избегать UDF, чтобы не снижать производительность, , если кто-нибудь может предложить способ фильтрации столбца "собранных" набора данных для пустых значений с минимальными издержками , это было бы очень полезно.