#list #pyspark #pyspark-dataframes
#Список #pyspark
Вопрос:
У меня есть два предопределенных списка, как показано ниже.
East = ["Bengal", "Bihar", "Assam"]
West = ["Bombay", "Gujarat", "Goa"]
У меня есть фрейм данных pyspark, как показано ниже. Мне нужно добавить третий столбец (состояние) во фрейм данных в зависимости от имени во втором столбце после поиска в списках (Город).
df:
Num City
1 Bengal
2 Goa
3 Bombay
4 Bihar
Ожидаемый результат:
Num City State
1 Bengal East
2 Goa West
3 Bombay West
4 Bihar East
Спасибо
Комментарии:
1. вы пробовали что-нибудь? idownvotedbecau.se/noattempt
2. Покажите свою работу по решению этой проблемы и сообщите нам, где вы застряли.
Ответ №1:
Вы можете использовать эту isin
функцию.
East = ["Bengal", "Bihar", "Assam"]
West = ["Bombay", "Gujarat", "Goa"]
from pyspark.sql.functions import when, col
df.withColumn("state", when(col("City").isin(East), "East")
.when(col("City").isin(West), "West").otherwise(None)).show()
--- ------ -----
|Num| City|state|
--- ------ -----
| 1|Bengal| East|
| 2| Goa| West|
| 3|Bombay| West|
| 4| Bihar| East|
--- ------ -----
Ответ №2:
Я мог бы сделать только в pandas, как показано ниже. Поскольку набор данных огромен, я пытаюсь преобразовать это в pyspark. Спасибо.
Код Pandas, как показано ниже
def map_state(name):
#print(name)
East = ["Bengal", "Bihar", "Assam"]
West = ["Bombay", "Gujarat", "Goa"]
if name in East:
return 'East'
if name in West:
return 'West'
else:
return name
df['State'] = df['City'].apply(map_state)