#python #pandas #dataframe #apache-spark
#python #pandas #dataframe #apache-spark
Вопрос:
В python и pandas я могу создать новый столбец следующим образом:
Использование двух столбцов в pandas dataframe для создания dict.
dict1 = dict(zip(data["id"], data["duration"]))
Затем я могу применить этот dict для создания нового столбца во втором фрейме данных.
df['id_duration'] = df['id'].map(lambda x: dict1[x] if x in dict1.keys() else -1)
Как я могу создать новый столбец id_duration
в spark sql dataframe, если у меня есть dataframe data
(имеющий два столбца: id
и duration
) и dataframe df
(имеющий столбец id
)?
Комментарии:
1. внезапно я понимаю, что это может быть решено с помощью sql join
Ответ №1:
Использование словаря было бы позором, потому что вам нужно было бы собрать весь data
фрейм данных в драйвере, что очень плохо скажется на производительности и может вызвать ошибку ООМ.
Вы могли бы просто выполнить левое внешнее соединение между двумя фреймами данных и использовать na.fill
для заполнения пустых значений -1
.
data = spark.createDataFrame([(1, 10), (2, 20), (3, 30)], ['id', 'duration'])
df = spark.createDataFrame([(1, 2), (3, 4)], ['id', 'x'])
df
.join(data.withColumnRenamed("duration", "id_duration"), ['id'], 'left')
.na.fill(-1).show()
--- --- -----------
| id| x|id_duration|
--- --- -----------
| 5| 6| -1|
| 1| 2| 10|
| 3| 4| 30|
--- --- -----------
Комментарии:
1. спасибо, это полезно. Но использование Map idea для решения этой проблемы также приветствуется, я думаю, что это может быть более распространенным.
2. Я не уверен, что понимаю. Вы хотели бы получить решение, которое использует словарь?
3. больше решений, больше свободы. я просто думаю, что это также полезно в какой-то ситуации.