У меня есть фрейм данных с несколькими столбцами:
| a | b | c | d |
-----------------
| 0 | 4 | 3 | 6 |
| 1 | 7 | 0 | 4 |
| 2 | 4 | 3 | 6 |
| 3 | 9 | 5 | 9 |
Теперь я хотел бы объединить [b,c,d]
в один столбец. Однако Я не знаю, насколько большим будет список столбцов , иначе я мог бы просто использовать UDF3 для объединения трех.
Итак, желаемый результат:
| a | combined |
-----------------
| 0 | [4, 3, 6] |
| 1 | [7, 0, 4] |
| 2 | [4, 3, 6] |
| 3 | [9, 5, 9] |
Как мне этого добиться?
нерабочий псевдокод:
public static Dataset<Row> mergeColumns(Dataset<Row> ds, List<String> columns) {
return ds.withColumn("combined", collectAsList(columns))
}
Обходным решением в худшем случае будет оператор switch для числа входных столбцов, а затем записывается UDF для каждого, то есть 2-20 входных столбцов, и выдается ошибка, если указано больше входных столбцов.