Я использую искры, чтобы читать CSV-файл, как это:Как уменьшить перетасовку и время, затраченное Spark при создании карты предметов?
x, y, z
x, y
x
x, y, c, f
x, z
Я хочу, чтобы сделать карту пунктов против их подсчета. Это код, который я написал:
private def genItemMap[Item: ClassTag](data: RDD[Array[Item]], partitioner: HashPartitioner): mutable.Map[Item, Long] = {
val immutableFreqItemsMap = data.flatMap(t => t)
.map(v => (v, 1L))
.reduceByKey(partitioner, _ + _)
.collectAsMap()
val freqItemsMap = mutable.Map(immutableFreqItemsMap.toSeq: _*)
freqItemsMap
}
Когда я запускаю его, он занимает много времени и перемешивает пространство. Есть ли способ сократить время?
У меня есть кластер из двух узлов с 2 ядрами и 8 разделов. Количество строк в файле csv составляет 170000.
Проблема в том, что 'collectAsMap'. Все операции 'collect' приводят к сборке в памяти всех элементов одного исполнителя, который снова передает все эти данные. Вы должны полностью удалить все операции 'collect' при работе с реальными данными –