Проверка значений одного столбца в столбце в другом фрейме данных в pyspark

У меня есть два фрейма данных Pyspark (DF1 и DF2). Я хочу проверить, доступны ли города в DF1 в столбце городов в DF2, и если да, то вернуть название страны из DF2 и создать новый фрейм данных DF3 с Sl.No, City и Country.

DF1
Sl.No City
1 a
2 b
2 c
4 d
5 e

DF2
Загородные города
W a
V b, c X d, e

DF3
Sl.No Город Страна 1 a W 2 b V 3 c V 4 d X 5 e X


person amit panda    schedule 30.10.2019    source источник


Ответы (1)


Этого можно добиться с помощью разнесения

import pyspark.sql.functions as F

l1 = [(1, 'a', ), (2, 'b', ), (3, 'c'), (4, 'd'), (5, 'e')]
df1 = sqlContext.createDataFrame(l1, ['sino','city'])
#df1.show()

l1 = [('W', ['a'] ), ('V', ['b','c'] ), ('X', ['d', 'e'])]
df2 = sqlContext.createDataFrame(l1, ['ctry','cities'])
#df2.show()

df2 = df2.withColumn('cityName', F.explode('cities'))

df3 = df1.join(df2, df1.city == df2.cityName).drop('cities', 'cityName')

df3.show()

+----+----+----+
|sino|city|ctry|
+----+----+----+
|   1|   a|   W|
|   3|   c|   V|
|   5|   e|   X|
|   2|   b|   V|
|   4|   d|   X|
+----+----+----+
person Sagar    schedule 30.10.2019