在 Scala 中,(0 to 20).map(_ => (_, 0)) 无法编译,因为它的 placeholder 语法无效。我相信您可能正在寻找类似以下的内容:
val data = (0 to 20).map( _->0 )
这将生成一个键值对列表,实际上只是一个占位符简写:
val data = (0 to 20).map( n => n->0 )
// data: scala.collection.immutable.IndexedSeq[(Int, Int)] = Vector(
// (0,0), (1,0), (2,0), (3,0), (4,0), (5,0), (6,0), (7,0), (8,0), (9,0), (10,0),
// (11,0), (12,0), (13,0), (14,0), (15,0), (16,0), (17,0), (18,0), (19,0), (20,0)
// )
RDD 是一个不可变的数据集合(例如Seq、Array)。要创建 Map[Int,Int] 的 RDD,您可以在 Map 内展开 data,然后将其放入 Seq 集合中:
val rdd = sc.parallelize(Seq(Map(data: _*)))
rdd.collect
// res1: Array[scala.collection.immutable.Map[Int,Int]] = Array(
// Map(0 -> 0, 5 -> 0, 10 -> 0, 14 -> 0, 20 -> 0, 1 -> 0, 6 -> 0, 9 -> 0, 13 -> 0, 2 -> 0, 17 -> 0,
// 12 -> 0, 7 -> 0, 3 -> 0, 18 -> 0, 16 -> 0, 11 -> 0, 8 -> 0, 19 -> 0, 4 -> 0, 15 -> 0)
// )
请注意,这个 RDD 只包含一个 Map,当然您可以在 RDD 中组装任意数量的 Maps。
val rdd2 = sc.parallelize(Seq(
Map((0 to 4).map( _->0 ): _*),
Map((5 to 9).map( _->0 ): _*),
Map((10 to 14).map( _->0 ): _*),
Map((15 to 19).map( _->0 ): _*)
))