Обычно я загружаю файлы csv, а затем запускаю разные типы агрегатов, например, «group by» с помощью Spark. Мне было интересно, можно ли запускать такие операции во время загрузки файла (как правило, несколько миллионов строк) вместо того, чтобы секвенировать их, и если это может быть достойным (как экономия времени).Искра: группировка во время загрузки
Пример:
val csv = sc.textFile("file.csv")
val data = csv.map(line => line.split(",").map(elem => elem.trim))
val header = data.take(1)
val rows = data.filter(line => header(0) != "id")
val trows = rows.map(row => (row(0), row))
trows.groupBy(//row(0) etc.)
Для моего понимания того, как работает искра, то groupBy
(или aggregate
) будет «отложено» до загрузки в память весь файл CSV. Если это правильно, может ли загрузка и группировка выполняться в «одно и то же» время вместо последовательности двух шагов?
Хорошо спасибо. Если это так, любая дальнейшая оптимизация на моей стороне бесполезна. Функции высокого порядка от Spark все вообще ленивы или есть исключения? – Randomize
Большая часть этого материала не зависит от искры. Это просто свойство структур данных, которые используются для реализации внутренней логики. Но в целом я бы сказал, что Спарк такой ленивый, что имеет смысл на практике. – zero323