Как найти записи в СДР, используя другой СДР? - PullRequest
0 голосов
/ 15 апреля 2020

У меня есть 2 RDD, а именно firstRdd и secondRdd.

Структура обоих RDD показана ниже:

firstRdd = (f_key, f_val1, f_val2, f_val3, f_val4, f_name)
secondRdd = (s_key, s_val1, s_val2, s_val3, s_val4, s_name)

Теперь, firstRdd содержит до 2M текстовых записей, в то время как secondRdd содержит записи до 500 млн. Текстовых записей.

Задача:

  • Я хочу найти secondRdd и найти записи с s_name которые точно соответствуют f_name,
  • Проверьте, имеет ли эта запись в secondRdd s_val3 > f_val3 и
  • Наконец, добавьте запись в secondRdd, которая прошла первые 2 теста, к записи firstRdd как показано ниже:

    firstRdd = (f_key, f_val1, f_val2, f_val3, f_val4, f_name, [secondRddeEntry])
    where secondRddEntry has the secondRdd structure shown above
    

    Идеи:

  • Использование sc.broadcast(secondRddd.collect()). Это неэффективно, так как secondRdd огромен, и драйвер искры, вероятно, исчерпает память.

  • Найдите способ преобразовать secondRdd в список, который я могу использовать с операцией карты. Это также может быть неэффективным и приводить к ошибкам.

У вас есть идея эффективного способа сделать это?

...