Найдите общие строки в двух информационных кадрах и отметьте общие строки в первом - PullRequest
0 голосов
/ 16 января 2019

Я работаю над проектом прогнозирования ссылок в Spark, используя Scala. Моя цель состоит в том, чтобы найти две общие строки между двумя фреймами данных (один из них содержит основную правду всех ссылок) и пометить их в первом. Таким образом, отмеченные строки будут представлять существующие линии. Например, у меня есть следующие кадры данных:

+---+---+  +---+---+ 
|id1|id2|  |id1|id2|  
+---+---+  +---+---+  
| 2 | 3 |  | 4 | 1 | 
| 1 | 4 |  | 2 | 3 | 
+---+---+  +---+---+

И я хочу, чтобы результат был:

+---+---+-----+
|id1|id2|label|
+---+---+-----+
| 2 | 3 |  1  |
| 1 | 4 |  0  |
+---+---+-----+ 

Где 1 означает, что ссылка существует во втором фрейме данных, тогда как 0 означает обратное. Ссылки направлены.

1 Ответ

0 голосов
/ 16 января 2019

Вы можете сделать левое соединение между двумя фреймами данных следующим образом:

import org.apache.spark.sql.functions.when
import spark.implicits._
val df1 = sc.parallelize(Seq((2,3),(1,4))).toDF("id1","id2")
val df2 = sc.parallelize(Seq((4,1),(2,3))).toDF("id1","id2")
val df3 = df1.join(df2, df1("id1")===df2("id1") && df1("id2") === df2("id2"), "left")
    .select(df1("id1"),
      df1("id2"),
      when(df2("id1").isNull, 0).otherwise(1).alias("label"))
df3.show()
+---+---+-----+
|id1|id2|label|
+---+---+-----+
|  2|  3|    1|
|  1|  4|    0|
+---+---+-----+

Надеюсь, это поможет вам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...