Python 如何基于使用pyspark匹配的cellname更新DF1中DF2的所有值
我有两个数据帧,我想根据匹配的cellname更新DF1中DF2的所有值。我将在Pypark中找到什么。请帮忙。 你可以试试这个 创建两个数据帧Python 如何基于使用pyspark匹配的cellname更新DF1中DF2的所有值,python,pyspark,apache-spark-sql,Python,Pyspark,Apache Spark Sql,我有两个数据帧,我想根据匹配的cellname更新DF1中DF2的所有值。我将在Pypark中找到什么。请帮忙。 你可以试试这个 创建两个数据帧 >>> a=[1, 2, 3, 4] >>> b=[2, 3, 4, 5] >>> sqlContext.createDataFrame(zip(a, b), schema=['a', 'b']).show() +---+---+ | a| b| +---+---+ | 1| 2| | 2
>>> a=[1, 2, 3, 4]
>>> b=[2, 3, 4, 5]
>>> sqlContext.createDataFrame(zip(a, b), schema=['a', 'b']).show()
+---+---+
| a| b|
+---+---+
| 1| 2|
| 2| 3|
| 3| 4|
| 4| 5|
+---+---+
>>> df = sqlContext.createDataFrame(zip(a, b), schema=['a', 'b'])
>>> a=[1,2]
>>> b=[23, 34]
>>> df2 = sqlContext.createDataFrame(zip(a, b), schema=['a', 'b'])
执行leftouter连接并删除不必要的列
>>> df.show()
+---+---+
| a| b|
+---+---+
| 1| 2|
| 2| 3|
| 3| 4|
| 4| 5|
+---+---+
>>> df2.show()
+---+---+
| a| b|
+---+---+
| 1| 23|
| 2| 34|
+---+---+
>>> df.join(df2, df.a == df2.a, "leftouter").drop(df2.a).drop(df.b).show()
+---+----+
| a| b|
+---+----+
| 1| 23|
| 3|null|
| 2| 34|
| 4|null|
+---+----+
我在这两个数据帧中看到的唯一区别是
siteAddress
列。为了能够使用该解决方案,您需要重命名其中一个数据帧中的siteAddress
列。我正在第二个数据帧中重命名它
df2= df2.withColumnRenamed('siteAddress', 'siteAddress_y')
之后,您需要连接两个数据帧,并将所有值放入同一数据帧中
df = df1.join(df2, on="Name", how="left")
一旦你这样做了,你会注意到在数据集中有大量的null
值。我们使用coalesce函数来移除它
import pyspark.sql.functions as F
df\
.withColumn("UpdatedsiteAddress", F.coalesce(df.siteAddress, df.siteAddress_y))\
.drop("siteAddress", "siteAddress_y")
最后一行是删除额外的列,但如何删除这些空值?您需要获取数据帧中的所有数据