我无法理解可以调用sortByKey等函数的集合的数据类型。我有一个ListMap(我想要一个按顺序存储元素的数据结构),我想调用sortByKey。列表映射的内容是第一个n个数字作为键,1个作为值的值。我应该使用什么而不是列表地图?
val l = (1 to 1000).toList
val d = ListMap(l.map(s=> s -> 1):_*)
val rdd = sc.parallelize(Seq(d))
rdd.collect()
val sorted = rdd.sortByKey()
sorted.collect()
答案 0 :(得分:1)
要求非常简单:
RDD[(K, V)]
。implicit
必须有Ordering
K
。你的例子并没有多大意义,因为你创建的RDD
只有一个元素,所以实际上没有什么可以排序的。也许你想要这样的东西:
sc.range(1, 1001).map((_, 1)).sortByKey()
答案 1 :(得分:0)
您不需要ListMap
。您所需要的只是一个RDD
,其中包含一个基本的键和值元组,格式为RDD[(K, V)]
,在您的情况下我们有一个RDD[(Int, Int)]
:
val rdd: RDD[(Int, Int)] = sc.parallelize((1 to 1000).map(k => (k -> 1)).toSeq)
rdd.sortByKey().collect()
您还需要一个Ordering
,您目前可以免费获得Int
类型的原语。
答案 2 :(得分:0)
sortByKey ([升序],[numTasks])
当调用K实现Ordered的(K,V)对数据集时, 返回按键升序排序的(K,V)对数据集 降序,如布尔升序参数中所指定的。
所以你需要一个可以订购密钥的PairRDD
,参见其他答案的例子。