作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的输入数据集看起来像
id1, 10, v1
id2, 9, v2
id2, 34, v3
id1, 6, v4
id1, 12, v5
id2, 2, v6
我想要输出
id1; 6,v4 | 10,v1 | 12,v5
id2; 2,v6 | 9,v2 | 34,v3
是这样的
id1: array[num(i),value(i)] where num(i) should be sorted
我尝试过的:
获取id和第二列作为key,sortByKey
,但是因为是字符串,排序不像 int 那样发生,而是作为字符串发生
获取第二列作为key,sortByKey
,然后获取id和key以及第二列值中的列,reduceByKey
。但在这种情况下,虽然做reduceByKey
;订单不被保留。甚至 groupByKey
也没有阻止命令。实际上这是意料之中的。
任何帮助将不胜感激。
最佳答案
由于您没有提供有关输入类型的任何信息,我假设它是 RDD[(String, Int, String)]
:
val rdd = sc.parallelize(
("id1", 10, "v1") :: ("id2", 9, "v2") ::
("id2", 34, "v3") :: ("id1", 6, "v4") ::
("id1", 12, "v5") :: ("id2", 2, "v6") :: Nil)
rdd
.map{case (id, x, y) => (id, (x, y))}
.groupByKey
.mapValues(iter => iter.toList.sortBy(_._1))
.sortByKey() // Optional if you want id1 before id2
编辑:
要获得您描述的输出 in the comments您可以将传递给 mapValues
的函数替换为以下内容:
def process(iter: Iterable[(Int, String)]): String = {
iter.toList
.sortBy(_._1)
.map{case (x, y) => s"$x,$y"}
.mkString("|")
}
关于scala - reduceBykey Spark 维护秩序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31843391/
这个问题已经有答案了: Can a private method in super class be overridden in the sub-class? (12 个回答) 已关闭 6 年前。 我
我有一个从表中获取所有列的查询,然后我做了一些工作。问题是我使用插入的列名,但由于 Get-Member,它们的顺序不同。有没有办法获取属性名称(列名称)并维护顺序或重新排序 System.Data.
我是一名优秀的程序员,十分优秀!