Python 如何基于使用pyspark匹配的cellname更新DF1中DF2的所有值

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

我有两个数据帧,我想根据匹配的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|  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")

最后一行是删除额外的列

,但如何删除这些空值?您需要获取数据帧中的所有数据