Apache spark pyspark数据帧中值的条件替换
我的spark数据框如下:Apache spark pyspark数据帧中值的条件替换,apache-spark,pyspark,apache-spark-sql,Apache Spark,Pyspark,Apache Spark Sql,我的spark数据框如下: +----------+-------------+--------------+------------+----------+-------------------+ | part| company| country| city| price| date| +----------+-------------+--------------+------------+----------
+----------+-------------+--------------+------------+----------+-------------------+
| part| company| country| city| price| date|
+----------+-------------+--------------+------------+----------+-------------------+
| 52125-136| Brainsphere| null| Braga| 493.94€|2016-05-10 11:13:43|
| 70253-307|Chatterbridge| Spain| Barcelona| 969.29€|2016-05-10 13:06:30|
| 50563-113| Kanoodle| Japan| Niihama| ¥72909.95|2016-05-10 13:11:57|
|52380-1102| Flipstorm| France| Nanterre| 794.84€|2016-05-10 13:19:12|
| 54473-578| Twitterbeat| France| Annecy| 167.48€|2016-05-10 15:09:46|
| 76335-006| Ntags| Portugal| Lisbon| 373.07€|2016-05-10 15:20:22|
| 49999-737| Buzzbean| Germany| Düsseldorf| 861.2€|2016-05-10 15:21:51|
| 68233-011| Flipstorm| Greece| Athens| 512.89€|2016-05-10 15:22:03|
| 36800-952| Eimbee| France| Amiens| 219.74€|2016-05-10 21:22:46|
| 16714-295| Teklist| null| Arnhem| 624.4€|2016-05-10 21:57:15|
| 42254-213| Thoughtmix| Portugal| Amadora| 257.99€|2016-05-10 22:01:04|
从这些列中,只有country列具有空值。我要做的是用右边城市对应的国家填充空值。数据帧很大,有些情况下Braga(例如)拥有它所属的国家,有些情况下则不是这样
那么,如何基于右侧的城市列在country列中填充这些空值,同时利用Spark的并行计算?使用Spark中的coalesce函数从列列表中获取第一个
非空值
示例:
df.show()
#+--------+---------+
#| country| city|
#+--------+---------+
#| null| Braga|
#| Spain|Barcelona|
#| null| Arnhem|
#|portugal| Amadora|
#+--------+---------+
from pyspark.sql.functions import *
df.withColumn("country",coalesce(col("country"),col("city"))).show()
#+--------+---------+
#| country| city|
#+--------+---------+
#| Braga| Braga|
#| Spain|Barcelona|
#| Arnhem| Arnhem|
#|portugal| Amadora|
#+--------+---------+
使用spark中的合并
函数从列列表中获取第一个非空值
示例:
df.show()
#+--------+---------+
#| country| city|
#+--------+---------+
#| null| Braga|
#| Spain|Barcelona|
#| null| Arnhem|
#|portugal| Amadora|
#+--------+---------+
from pyspark.sql.functions import *
df.withColumn("country",coalesce(col("country"),col("city"))).show()
#+--------+---------+
#| country| city|
#+--------+---------+
#| Braga| Braga|
#| Spain|Barcelona|
#| Arnhem| Arnhem|
#|portugal| Amadora|
#+--------+---------+
您可以使用窗口函数来实现这一点
从pyspark.sql导入函数为F,窗口
df.withColumn(
“国家”,
聚结(
F.col(“国家”),
F.first(“国家”)。以上(窗口、分区(“城市”)。订购人(“城市”)),
),
).show()
您可以使用窗口功能来实现这一点
从pyspark.sql导入函数为F,窗口
df.withColumn(
“国家”,
聚结(
F.col(“国家”),
F.first(“国家”)。以上(窗口、分区(“城市”)。订购人(“城市”)),
),
).show()
@Alexandrosgiannakis它真的有效吗?你想用城市的名字来填写这个国家?比如城市=布拉加和国家=布拉加
?不是葡萄牙?哦,天哪。你是对的。这只是城市的名字。真的很抱歉@它真的有效吗?你想用城市的名字来填写这个国家?比如城市=布拉加和国家=布拉加
?不是葡萄牙?哦,天哪。你是对的。这只是城市的名字。真的很抱歉!!