Spark left_outer join возвращает элементы, существующие в обоих списках - PullRequest
0 голосов
/ 22 ноября 2018

Я использую spark-shell для сравнения 2 CSV-файлов.Каждый файл имеет одинаковое количество столбцов и все 600 000 строк.Я ожидаю, что 2 файла имеют одинаковые строки.Вот мой сценарий.

val a =
  spark
    .read
    .option("header", "true")
    .option("delimiter", "|")
    .csv("/tmp/1.csv")
    .drop("unwanted_column").
    .cache()

val b = 
   spark
     .read
     .option("header", "true")
     .option("delimiter", "|")
     .csv("/tmp/2.csv")
     .drop("unwanted_column")
     .cache()

val c = a.join(b, Seq("id", "year"), "left_outer").cache()

c.count() // this is returning 600,000

Теперь я пытаюсь выяснить разницу путем случайного выбора строки с одинаковым идентификатором и годом в двух наборах данных a и b.

val a1 = a.filter(i => i.get(0).equals("1") && i.get(1).equals("2016")).first()

val b1 = b.filter(i => i.get(0).equals("1") && i.get(1).equals("2016")).first()

Затем я пытаюсь сравнить каждый столбец в a1 и b1.

(0 to (a1.length -1)).foreach { i =>
  if (a1.getString(i) != null && !a1.getString(i).equals(b1.getString(i))) {
    System.out.println(i + " = " + a1.getString(i) + " = " + b1.getString(i))
  }
}

Он ничего не печатал.Другими словами, нет никакой разницы.

Я не могу сказать, почему c.count () возвращает 600 000 таким образом.

1 Ответ

0 голосов
/ 22 ноября 2018

Извините, ребята, я думаю, это была моя вина.На самом деле я был после вычитания (б).Моя цель - выяснить разницу между а и б.Я был озадачен присоединением left_outer.

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