mapPartitions и foreachPartitition были для СДР. Теперь набор данных также может использовать mapPartitions.
Как правило, вы должны использовать Spark DSL- или Spark SQL API на Dataframes или DataSets. Они используют Catalyst Optimizer, что подразумевает меньше размышлений, и он также работает в параллельном режиме. Пример для Dataframe, аналогичный DataSet:
import org.apache.spark.sql.functions._
import spark.implicits._
//import org.apache.spark.sql._
//import org.apache.spark.sql.types._
val df = Seq(
("green","y", 4),
("blue","n", 7),
("red","y", 7),
("yellow","y", 7),
("cyan","y", 7)
).toDF("colour", "status", "freq")
val df2 = df.where("status = 'y'")
.select($"freq", $"colour")
.groupBy("freq")
.agg(collect_list($"colour"))
df2.show(false)
возвращается:
+----+--------------------+
|freq|collect_list(colour)|
+----+--------------------+
|4 |[green] |
|7 |[red, yellow, cyan] |
+----+--------------------+
Но, как и в случае с RDD, вы можете использовать mapPartitions на DS.