Мне нужно сгруппировать набор строк csv определенным столбцом и выполнить некоторую обработку в каждой группе.Обработка данных Spark с группировкой
JavaRDD<String> lines = sc.textFile
("somefile.csv");
JavaPairRDD<String, String> pairRDD = lines.mapToPair(new SomeParser());
List<String> keys = pairRDD.keys().distinct().collect();
for (String key : keys)
{
List<String> rows = pairRDD.lookup(key);
noOfVisits = rows.size();
country = COMMA.split(rows.get(0))[6];
accessDuration = getAccessDuration(rows,timeFormat);
Map<String,Integer> counts = getCounts(rows);
whitepapers = counts.get("whitepapers");
tutorials = counts.get("tutorials");
workshops = counts.get("workshops");
casestudies = counts.get("casestudies");
productPages = counts.get("productpages");
}
private static long dateParser(String dateString) throws ParseException {
SimpleDateFormat format = new SimpleDateFormat("MMM dd yyyy HH:mma");
Date date = format.parse(dateString);
return date.getTime();
}
dateParser is called for each row. Then min and max for the group is calculated to get the access duration. Others are string matches.
параRDD.lookup чрезвычайно медленный .. Есть ли лучший способ сделать это с помощью искры.
Я уже пробовал это. Он еще медленнее. Одна операция разбора столбца даты для каждой группы для вычисления продолжительности. – lochi
Не могли бы вы добавить подробности к вопросу о выполняемой операции над значениями для каждого ключа? 'reduceByKey' более эффективен, чем' groupByKey' и может быть лучшим выбором. – maasg
смотрите выше .. спасибо. – lochi