У меня есть 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
в список, который я могу использовать с операцией карты. Это также может быть неэффективным и приводить к ошибкам.
У вас есть идея эффективного способа сделать это?