python - 在pyspark中检查另一个数据框中的一列中的一列的值
问题描述
我有两个 Pyspark 数据框(DF1 和 DF2)。我想检查 DF1 中的城市是否在 DF2 的城市列中可用,如果是,则从 DF2 返回国家名称并使用 Sl.No、城市和国家创建一个新的数据框 DF3。
DF1
Sl.No 城市
1 a
2 b
2 c
4 d
5 e
DF2
国家城市
W a
V b,c X d,e
DF3
Sl.No City Country 1 a W 2 b V 3 c V 4 d X 5 e X
解决方案
这可以使用爆炸来实现
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|
+----+----+----+
推荐阅读
- android - Android 应用程序图标未在某些设备中显示
- laravel - 如何在流明中异步调用队列推送功能?
- typescript - 如何将带有 Map 的对象转换为 JSON 对象
- javascript - Google Charts 生成的二维码问题
- canoe - 将外部传感器连接到 CANoe
- sql - 删除 Teradata sql 中第 n 个下划线后的所有字符
- android - 如何实现像Uber Eats Food Menu滚动这样的滚动功能
- android - Playstore 提示“声明敏感权限”
- android - AndroidManifest.xml 不存在或 React Native 的根标签不正确
- c# - 无法通过 XPO 在 C# 代码中连接到 Postgres 数据库