Сравнение двух идентично структурированных фреймов данных в Spark - PullRequest
1 голос
/ 26 февраля 2020
val originalDF = Seq((1,"gaurav","jaipur",550,70000),(2,"sunil","noida",600,80000),(3,"rishi","ahmedabad",510,65000)).toDF("id","name","city","credit_score","credit_limit")

val changedDF= Seq((1,"gaurav","jaipur",550,70000),(2,"sunil","noida",650,90000),(4,"Joshua","cochin",612,85000)).toDF("id","name","city","creditscore","credit_limit")

Таким образом, два вышеупомянутых кадра данных имеют одинаковую структуру таблицы, и я хочу узнать идентификаторы, значения которых изменились в другом кадре данных (updatedDF). Я попытался с помощью функции exc () в spark, но она дает мне две строки. Идентификатор является общим столбцом между этими двумя фреймами данных.

changedDF.except(originalDF).show
+---+------+------+-----------+------------+
| id|  name|  city|creditscore|credit_limit|
+---+------+------+-----------+------------+
|  4|Joshua|cochin|        612|       85000|
|  2| sunil| noida|        650|       90000|
+---+------+------+-----------+------------+

Принимая во внимание, что я хочу только общие идентификаторы, для которых произошли какие-либо изменения. Как это ->

+---+------+------+-----------+------------+
| id|  name|  city|creditscore|credit_limit|
+---+------+------+-----------+------------+
|  2| sunil| noida|        650|       90000|
+---+------+------+-----------+------------+

Есть ли способ выяснить только общие идентификаторы, для которых изменились данные. Кто-нибудь может сказать мне любой подход, который я могу использовать, чтобы достичь этого.

1 Ответ

2 голосов
/ 26 февраля 2020

Вы можете выполнить объединение inner фреймов данных, которое даст вам результат с общими идентификаторами.

originalDF.alias("a").join(changedDF.alias("b"), col("a.id") === col("b.id"), "inner")
  .select("a.*")
  .except(changedDF)
  .show

Тогда ваш ожидаемый результат будет отсутствовать:

+---+-----+-----+------------+------------+
| id| name| city|credit_score|credit_limit|
+---+-----+-----+------------+------------+
|  2|sunil|noida|         600|       80000|
+---+-----+-----+------------+------------+
...