Spark - это инфраструктура распределенной обработки, когда вы имеете дело с большим количеством данных. Spark обрабатывает их в кластере, когда вы вызываете функцию сбора, все данные, которые считываются на всех разных ядрах / машинах, возвращаются в драйвер. Когда вы делаете это, вы должны убедиться, что у вас достаточно памяти на вашем драйвере.
То, что вы делаете, крайне неэффективно, потому что вы собираете весь фрейм данных в драйвер, а затем выполняете преобразования на нем. Используя spark, вы можете сделать что-то похожее с кодом ниже:
val someDF = Seq(
("Abc", "apple"),
("Abc", "mango"),
("xyz", "grapes"),
("xyz", "peach")
).toDF(
"group", "fruit")
val s = someDF.groupBy(col("group")).
agg(collect_list("fruit").as("fruits")).as[(String, List[String])].collect.toMap
выход этого
Map(Abc -> List(apple, mango), xyz -> List(grapes, peach))