Вычтите 2 кадра данных pyspark на основе столбца - PullRequest
0 голосов
/ 15 ноября 2018

У меня есть 2 кадра данных pyspark,

i
+---+-----+
| ID|COL_A|
+---+-----+
|  1|  123|
|  2|  456|
|  3|  111|
|  4|  678|
+---+-----+
j
+----+-----+
|ID_B|COL_B|
+----+-----+
|   2|  456|
|   3|  111|
|   4|  876|
+----+-----+

Я пытаюсь вычесть i из j на основе значений определенного столбца, т. Е. Значения, присутствующие в COL_A из i, не должны присутствовать в COL_B из j .

Ожидаемый результат должен быть,

diff
+---+-----+
| ID|COL_A|
+---+-----+
|  1|  123|
|  4|  678|
+---+-----+

Это мой код,

common = i.join(j.withColumnRenamed('COL_B', 'COL_A'), ['COL_A'], 'leftsemi')
diff = i.subtract(common)
diff.show()

Но вывод идет не так,

diff
+---+-----+
| ID|COL_A|
+---+-----+
|  2|  456|
|  1|  123|
|  4|  678|
|  3|  111|
+---+-----+

Я что-то здесь не так делаю? Заранее спасибо.

1 Ответ

0 голосов
/ 15 ноября 2018

Попробуйте:

left_join = i.join(j, j.COL_B == i.COL_A,how='left')
left_join.filter(left_join.COL_A.isNull()).show()

Если у вас есть имена столбцов в качестве аргументов, вы можете сделать так:

left_join = i.join(j, j[colb] == i[cola],how='left')
left_join.filter(left_join[cola].isNull()).show()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...