преобразование столбцов pyspark

#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)