фильтровать значения одного фрейма данных, если он присутствует, а не существует в другом фрейме данных - PullRequest
0 голосов
/ 30 марта 2019

У меня есть два набора данных и справочные данные. Подробнее

код даты местоположения температуры

1      1-1-19    blr      30


2      1-2-18    up       33


3      1-2-18    dlh      25

refrenceDetails

код даты расположения

1 1-1-19 млрд

2 1-2-18 up

Я бы хотел отфильтровать записи из набора данных деталей как действительные данные, если код существует в наборе данных referenceDetails, в противном случае сразу как недействительные детали

Я пытался сделать внутреннее соединение и левое_анти соединение. Но я должен присоединиться дважды. Есть ли способ избежать присоединения дважды

  val invalidRecords = detailsDS.join(referencedetailsDS,Seq(Code),"left_anti")


val invalidRecords = detailsDS.join(referencedetailsDS,Seq(Code),"inner")

 Valid Details


#code    date   location temperature


    1     1-1-19    blr      30


    2     1-2-18  up       33

 Invalid Details

code    date   location temperature

    3     1-2-18  dlh      25

1 Ответ

1 голос
/ 31 марта 2019

с левым соединением:

// data
val details = Seq(
  (1, "1-1-19", "blr", 30),
  (2, "1-2-18", "up", 33),
  (3, "1-2-18", "dlh", 25)
).toDF("code", "date", "location", "temperature")

val refrenceDetails = Seq(
  (1, "1-1-19", "blr"),
  (2, "1-2-18", "up")).
  toDF("code", "date", "location")

// action
val joined = details.alias("d").join(refrenceDetails.alias("r"), Seq("code"), "left")
val validDetails = joined.where($"r.code".isNotNull)
val invalidDetails = joined.where($"r.code".isNull)

// display
validDetails.show(false)
invalidDetails.show(false)

Вывод:

+----+------+--------+-----------+------+--------+
|code|date  |location|temperature|date  |location|
+----+------+--------+-----------+------+--------+
|1   |1-1-19|blr     |30         |1-1-19|blr     |
|2   |1-2-18|up      |33         |1-2-18|up      |
+----+------+--------+-----------+------+--------+

+----+------+--------+-----------+----+--------+
|code|date  |location|temperature|date|location|
+----+------+--------+-----------+----+--------+
|3   |1-2-18|dlh     |25         |null|null    |
+----+------+--------+-----------+----+--------+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...