Как обновить все значения DF2 в DF1 на основе имени ячейки, сопоставленного с помощью pyspark - PullRequest
0 голосов
/ 11 октября 2019

У меня есть два фрейма данных, я хочу обновить все значения DF2 в DF1 на основе сопоставленного имени ячейки. Как я найду в pyspark. Пожалуйста помоги. введите описание изображения здесь

Ответы [ 2 ]

1 голос
/ 11 октября 2019

Единственное отличие, которое я вижу в двух данных, заключается в столбце siteAddress. Чтобы использовать решение, вам нужно переименовать столбец siteAddress в одном из фреймов данных. Я переименовываю его во второй фрейм данных

df2= df2.withColumnRenamed('siteAddress', 'siteAddress_y')

После этого вам нужно объединить два фрейма данных и перенести все значения в один и тот же фрейм данных.

df = df1.join(df2, on="Name", how="left")

Как только вы это сделаете,вы заметите, что в наборе данных есть набор значений null. Мы удалим это, используя функцию объединения

import pyspark.sql.functions as F
df\
    .withColumn("UpdatedsiteAddress", F.coalesce(df.siteAddress, df.siteAddress_y))\
    .drop("siteAddress", "siteAddress_y")

Последняя строка должна убрать лишние столбцы

1 голос
/ 11 октября 2019

Вы можете попробовать это Создать два кадра данных

>>> 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'])

выполнить левое соединение и удалить ненужные столбцы

>>> 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|
+---+----+

...