В моей заявке, когда вы принимаете номера перфоманса, groupby много времени уходит.Spark: groupBy занимает много времени
Мой РДД имеет ниже Страницы данного раздела:
JavaPairRDD<CustomTuple, Map<String, Double>>
CustomTuple: Этот объект содержит информацию о текущей строке в РДУ, как уже которую неделю, месяц, город и т.д.
public class CustomTuple implements Serializable{
private Map hierarchyMap = null;
private Map granularMap = null;
private String timePeriod = null;
private String sourceKey = null;
}
Карта
Эта карта содержит статистические данные данные о том, что ряд, как, сколько инвестиций, сколько ВРП и т.д.
<"Inv", 20>
<"GRP", 30>
Я выполнял ниже DAG на этом РДУ
- применить фильтр по этому РДУ и объема из соответствующих строк: Фильтр
- применить фильтр по этому РДУ и рамок из соответствующих строк: фильтр
- Вступи РД: Регистрация
- применять фазы карты для расчета инвестиций: Map
- применяют фазу GroupBy для группировки данных в соответствии с желаемым представлением: GroupBy
- применяет фазу карты для агрегирования данных в соответствии с группировкой, достигнутой на вышеуказанном этапе (например, данные просмотра в промежуток времени), а также создавать новые объекты на основе набора результатов желательно собирать: Карта
- собрать результат: Collect
Таким образом, если пользователь хочет просмотреть инвестиции через периоды времени, то ниже список возвращается (это было достигнуто в шаге 4):
<timeperiod1, value>
Когда я проверил время, проведенное в операциях, GroupBy брал 90% времени, затраченного на выполнение всей DAG.
IMO, мы можем заменить GroupBy и последующие операции с Map на единицу сокращения. Но сокращение будет работать на объект типа JavaPairRDD>. Итак, мой снимок будет подобен T reduce (T, T, T), где T будет CustomTuple, Map.
Или, может быть, после шага 3 в вышеприведённой DAG я запустил еще одну функцию карты, которая возвращает мне RDD типа для метрики, которая должна быть агрегирована, а затем запустить сокращение.
Кроме того, я не уверен, как работает агрегатная функция, и сможет ли она мне помочь в этом случае.
Во-вторых, мое приложение получит запрос на различные ключи. В моем текущем дизайне RDD каждый запрос потребует от меня переделки или перегруппировки моего RDD по этому ключу. Это означает, что для каждого запроса группировка/повторное разбиение займет 95% моего времени, чтобы вычислить задание.
<"market1", 20>
<"market2", 30>
Это очень обескураживает, поскольку текущая производительность приложения без искры в 10 раз лучше, чем производительность с помощью Spark.
Любое понимание оценено.
[EDIT] Мы также заметили, что JOIN занимал много времени. Возможно, именно поэтому группа взяла время. [EDIT]
TIA!
Спасибо jlopezmat. Можете ли вы разработать пример из моего варианта использования. Это прояснилось бы лучше. Скажем, например, я хочу, чтобы мои значения были агрегированы с использованием некоторого поля в карте CustomTuple, скажем, на рынке. Это было бы действительно полезно. Я хочу понять, как он заменит groupby, в котором я верну рынок в качестве ключа в том же сценарии, а затем сделаю агрегат в фазе карты. ТИА! – user1441849