У меня есть две таблицы в Hive: user
и item
, и я пытаюсь вычислить косинусное сходство между двумя характеристиками каждой таблицы для декартового произведения между двумя таблицами, т.е. перекрестное соединение.
Есть около 20000 users
и 5000 items
, что приводит к 100 million
строкам расчета.Я запускаю вычисления с использованием Scala Spark на кластере Hive с 12 ядрами.
Код выглядит примерно так:
val pairs = userDf.crossJoin(itemDf).repartition(100)
val results = pairs.mapPartitions(computeScore) // computeScore is a function to compute the similarity scores I need
Задание Spark всегда будет сбоить из-за проблем с памятью (GC Allocation Failure) в кластере Hadoop.Если я уменьшу количество вычислений примерно до 10 миллионов, оно точно будет работать - до 15 минут.
Как рассчитать весь набор без увеличения аппаратных характеристик?У меня все хорошо, если работа длится дольше и не выходит из строя на полпути.