У меня есть фрейм данных pyspark, содержащий N столбцов, содержащих целые числа. Некоторые поля также могут быть пустыми. Например:
+---+-----+-----+
| id| f_1 | f_2 |
+---+-----+-----+
| 1| null| null|
| 2|123 | null|
| 3|124 |127 |
+---+-----+-----+
Я хочу объединить все столбцы с префиксом f в массив pyspark в новом столбце. Например:
+---+---------+
| id| combined|
+---+---------+
| 1| [] |
| 2|[123] |
| 3|[124,127]|
+---+---------+
Ближе, что мне удалось получить, это:
features_filtered = features.select(F.concat(* features.columns[1:]).alias('combined'))
, который возвращает ноль (я предполагаю, из-за нулей в начальном фрейме данных). Из того, что я искал, я хотел бы использовать .coalesce()
или, может быть, .fillna()
для обработки / удаления нулей, но мне не удалось заставить его работать.
Мои основные требования заключаются в том, что я хотел бы, чтобы вновь созданный столбец имел тип Array и чтобы я не хотел перечислять все имена столбцов, которые мне нужно объединить.