Я имею следующие dataframe (значения внутри массива являются строками):Спарк Dataframes: добавление списка в новом столбце (питон)
+--------------------+--------------------+
| col1| col2|
+--------------------+--------------------+
| [value1, value2]| [value3,value4]|
| [value5]| [value6]|
+--------------------+--------------------+
Как я могу создать новый столбец с новым массивом, включая все значения обоих
+--------------------+--------------------+------------------------------+
| col1| col2| new |
+--------------------+--------------------+------------------------------+
| [value1, value2]| [value3,value4]|[value1, value2,value3,value4]|
| [value5]| [value6]| [value5,value6]|
+--------------------+--------------------+------------------------------+
Я попытался следующие:
def add_function(col1,col2):
return col1+col2
udf_add = udf(add_function,ArrayType(StringType()))
dftrial.withColumn("new",udf_add("col1","col2")).show(2)
Это действительно делает задачу по желанию. Но я не понимаю, почему, когда я изменить add_function
к: значение
def add_function(col1,col2):
return col1.extend(col2)
возвращает null
. Зачем?
И мой главный вопрос: есть ли другой способ реализовать эту задачу? Любая уже реализованная функция? Я нашел concat
, но кажется, что он работает только для строк.
Спасибо за ваш ответ. Можете ли вы пояснить, чего я никогда не должен делать? Потому что я не понял его точно и, похоже, это важная информация, которую мне не хватает. –
'list.extend' изменяет (мутирует) существующий' list'. Не делайте этого с вашими данными. Всегда возвращайте новый объект, если явно не разрешено делать иначе (см. «RDD.fold», «RDD.aggregate» и т. Д.). – zero323