Присоединяйтесь или вычитайтеByKey на 2 огромных RDD

pyspark rdd

597 просмотра

1 ответ

Я строю систему рекомендаций для розничных целей. Я использую Python и Spark.

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

Эти 2 RDD довольно большие и дают мне проблемы с памятью на 28 ГБ на рабочий узел (3 узла), когда я делаю

filter_predictions = predictions.subtractByKey(user_boughtproduct)

Когда я читаю документацию Spark, subtractByKey оптимален при использовании 1 большого и 1 маленького rdd.

Я не могу сделать user_boughtproduct меньше (если я не зациклюсь), но я мог сделать.

filter_predictions = predictions.join(user_nonBoughtProduct)

Любые мысли о том, какой из них быстрее или лучше всего практиковать? Или другое чистое решение.

Автор: Kevin Источник Размещён: 08.11.2019 11:12

Ответы (1)


2 плюса

Решение

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

Если вы используете Spark 2.0+ и записи могут быть закодированы с использованием Datasetкодеров, которые вы можете учитывать, leftanti joinно в зависимости от остальной части вашего кода стоимость перемещения данных может свести на нет преимущества оптимизированного выполнения.

Наконец, если вы можете принять потенциальную потерю данных, тогда построение фильтра Блума на правом СДР и использование его для фильтрации на левом может дать действительно хороший результат без перемешивания.

Автор: zero323 Размещён: 20.08.2016 03:30
Вопросы из категории :
32x32