Как определить приоритет соответствия искровых данных - PullRequest
0 голосов
/ 19 марта 2019

У меня есть два кадра данных.

dataDF

+---+
| tt|
+---+
|  a|
|  b|
|  c|
| ab|
+---+

alter

+----+-----+------+
|name|alter|profit|
+----+-----+------+
|   a|   aa|     1|
|   b|    a|     5|
|   c|   ab|     8|
+----+-----+------+

Задача состоит в том, чтобы найти col "tt" в кадре данных alter col ("name"), если он найден, присоединитесь к ним, если он не найден, выполните поиск col" tt "в col (" alter ").Приоритет col («имя») выше, чем col («изменить»).Это означает, что если строка col ("tt") соответствует col ("name"), я не хочу сопоставлять ее с другой строкой, которая соответствует только col ("alter").Как мне решить эту задачу?

Я пытался написать объединение, но оно не работает.

dataDF = dataDF.select("*")
      .join(broadcast(alterDF),
       col("tt") === col("Name") || col("tt") === col("alter"),
        "left")

Результат:

+---+----+-----+------+
| tt|name|alter|profit|
+---+----+-----+------+
|  a|   a|   aa|     1|
|  a|   b|    a|     5|   // this row is not expected. 
|  b|   b|    a|     5|
|  c|   c|   ab|     8|
| ab|   c|   ab|     8|
+---+----+-----+------+

1 Ответ

0 голосов
/ 19 марта 2019

Вы можете попробовать присоединиться дважды. В первый раз со столбцом имени отфильтруйте значения tt, для которых данные не сопоставляются, и объедините их со столбцом изменения. Объединение обоих результатов. Пожалуйста, найдите код ниже для того же. Я надеюсь, что это полезно.

//Creating Test Data
val dataDF = Seq("a", "b", "c", "ab").toDF("tt")

val alter = Seq(("a", "aa", 1), ("b", "a", 5), ("c", "ab", 8))
    .toDF("name", "alter", "profit")

val join1 = dataDF.join(alter, col("tt") === col("name"), "left")

val join2 = join1.filter( col("name").isNull).select("tt")
  .join(alter, col("tt") === col("alter"), "left")

val joinDF = join1.filter( col("name").isNotNull).union(join2)

joinDF.show(false)

+---+----+-----+------+
|tt |name|alter|profit|
+---+----+-----+------+
|a  |a   |aa   |1     |
|b  |b   |a    |5     |
|c  |c   |ab   |8     |
|ab |c   |ab   |8     | 
+---+----+-----+------+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...