как взять строки из кадра данных, которые не находятся в другом кадре данных, используя spark / scala - PullRequest
0 голосов
/ 29 марта 2020

У меня есть фрейм данных:

+++++++++++++++++++++++
|      Col1  |  col2    |
|+++++++++++++++++++++ |
|   A        |    A2   |
|   A        |    A2   |
|   B        |    b2
|   B        |    b2   |
|   C        |    c2   |
|   D        |    d2   |
|   E        |    e2   |
|   F        |    f2   |

И еще один фрейм данных

 +++++++++++++++++++++++
|      Col1  |  col2    |
|+++++++++++++++++++++ |
|   A        |    A2   |
|   B        |    b2   |
|   C        |    c2   |

Я хочу получить в результате:

+++++++++++++++++++++++
|      Col1  |  col2    |
|+++++++++++++++++++++ |
|   D        |    d2   |
|   E        |    e2   |
|   F        |    f2   |

Я делаю это:

df1.join(df2,Seq("col1","col2"),"left")

Но у меня не работает.

Есть идеи? Спасибо.

Ответы [ 2 ]

2 голосов
/ 29 марта 2020

Мы можем использовать .except или leftjoin для этого случая.

Example:

df.show()
//+----+----+
//|Col1|Col2|
//+----+----+
//|   A|  A2|
//|   A|  A2|
//|   B|  b2|
//|   B|  b2|
//|   C|  c2|
//|   D|  d2|
//|   E|  e2|
//|   F|  f2|
//+----+----+

df1.show()
//+----+----+
//|Col1|Col2|
//+----+----+
//|   A|  A2|
//|   B|  b2|
//|   C|  c2|
//+----+----+

df.except(df1).show()
//+----+----+
//|Col1|Col2|
//+----+----+
//|   E|  e2|
//|   F|  f2|
//|   D|  d2|
//+----+----+


df.alias("d1").join(df1.alias("d2"),
    (col("d1.Col1")===col("d2.Col1") &&(col("d1.Col2")===col("d2.Col2"))),"left").
filter(col("d2.Col2").isNull).
select("d1.*").
show()
//+----+----+
//|Col1|Col2|
//+----+----+
//|   D|  d2|
//|   E|  e2|
//|   F|  f2|
//+----+----+
1 голос
/ 29 марта 2020

Вы можете использовать, кроме как на обоих df.

scala> df1.except(df2).show
+----+----+
|Col1|col2|
+----+----+
|   E|  e2|
|   F|  f2|
|   D|  d2|
+----+----+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...