我有一个PySpark DataFrame,其中包含"Country"和"Continent"列。在一些记录中,缺少"Continent"的值。但是,有一些记录包含同一个国家的"Continent"(下面示例数据集中的"Italy"和"China")。
# Prepare Data
data = [
(1, "Italy", "Europe"),
(2, "Italy", "Europe"),
(3, "Italy", None),
(4, "Italy", None),
(5, "China", "Asia"),
(6, "China", None),
(7, "Japan", "Asia"),
(8, "France", None),
]
# Create DataFrame
columns = ["Code", "Country", "Continent"]
df = spark.createDataFrame(data=data, schema=columns)
df.show(truncate=False)
对于"洲"为Null的记录,我希望:
- 查找"洲"不为空的同一国家/地区的任何记录
- 获取"Continent"的值并填入空值
预期输出如下所示:
| 代码|国家|洲|
| - ------|- ------|- ------|
| 1个|"意大利"|"欧洲"|
| 第二章|"意大利"|"欧洲"|
| 三个|"意大利"|"欧洲"|
| 四个|"意大利"|"欧洲"|
| 五个|"中国"|"亚洲"|
| 六个|"中国"|"亚洲"|
| 七|"日本"|"亚洲"|
| 八个|"法国"|无效|
你知道怎么做吗?
2条答案
按热度按时间xzabzqsa1#
下面是其中一个解决方案,假设每个国家只有一个不同的
Continent
值,您可以在每个国家分区中使用max()
:或者,您可以创建一个较小的"参考" Dataframe ,并将广播连接回主 Dataframe 。
qyswt5oh2#
另一个解决方案,同样的结果: