Apache Spark Streaming Выходные записи левого внешнего соединения - PullRequest
0 голосов
/ 14 сентября 2018

Мы работаем над приложением Spark Streaming, в котором оно получает данные из kafka. У нас есть производитель, который публикует данные для kafka из файла с 1,5 миллионами записей.Из 1,5 миллиона записей - 1 миллион записей типа A и 0,5 миллиона записей типа B.Здесь, в этом файле, мы имеем 0,5 миллиона записей с одинаковым значением столбца, которое будет использоваться для объединения в потоковую передачу Spark.

Таким образом, в потоковой передаче с искрой мы выполняем левое внешнее объединение этих двух потоков (левое внешнее объединение B).Таким образом, ожидаемый результат должен иметь 1 миллион записей (0,5 миллиона записей, которые являются внутренним соединением, и 0,5 миллиона записей для нулевого соединения из левого потока).

Однако мы получили разные выходные значения для разных водяных знаков: 1) Если мы предоставимВодяной знак, равный 15 минутам, мы получаем 0,5 миллиона записей (внутреннее объединение) и 0,5 миллиона записей (несопоставленные записи с нулевым значением).

2) Если мы предоставим водяной знак как 2 минуты, мы получим более 1 миллиона записей (около 1,1 миллиона записей), где мы обнаружили, что выходной файл имеет дубликаты записей (записи, которые являются частью внутреннего объединения, также отображаются как часть нулевого объединения)

Пожалуйста, помогите мне понять, почему левое внешнее соединение генерирует больше записей, когда предоставляетсяменьше времени в водяном знаке.

Когда я говорю больше числовых записей, я имел в виду, что он генерирует записи, которые: -> совпадают (0,5 миллиона) + несопоставленные записи (0,5 миллиона с нулевыми значениями из левого потока) + 0,1миллион записей с нулевым объединением из левого потока.

0,1миллион записей - это дополнительные записи, которые на удивление уже являются частью внутреннего соединения (0,5 миллиона) и все еще присутствуют с нулевым соединением из левого потока.

...