如何按scala中的任意列对spark rdd的多个数组进行升序排序?

uxh89sit  于 2021-05-27  发布在  Spark
关注(0)|答案(2)|浏览(911)

我对apache spark感兴趣。
我尝试按scala中的任何列对spark rdd的多个数组进行升序排序。
(即。 RDD[Array[Int] -> Array(Array(1,2,3), Array(2,3,4), Array(1,2,1)) 如果我按第一列排序,那么结果将是 Array(Array(1,2,3), Array(1,2,1), Array(2,3,4)). 或者,如果我按第三列排序,那么结果将是 Array(Array(1,2,3), Array(1,2,3), Array(2,3,4)). )然后,我想得到rdd[array[int]]返回类型值。有没有解决的方法,是否使用 map() 或者 filter() 功能?

7ajki6be

7ajki6be1#

val baseRdd = sc.parallelize(Array(Array(1, 2, 3), Array(2, 3, 4), Array(1, 2, 1)))

//False specifies desending order 
val result = baseRdd.sortBy(x => x(1), false)

result.foreach { x => println(x(0) + "\t" + x(1) + "\t" + x(2)) }

结果
2 3 4
1 2 3
1 2 1

wmtdaxz3

wmtdaxz32#

使用 RDD.sortBy :

// sorting by second column (index = 1)
val result: RDD[Array[Int]] = rdd.sortBy(_(1), ascending = true)

也可以使用模式匹配编写排序函数:

val result: RDD[Array[Int]] = rdd.sortBy( {
  case Array(a, b, c) => b /* choose column(s) to sort by */
}, ascending = true)

还要注意 ascending 参数的默认值为 true ,这样就可以放下它并得到相同的结果:

val result: RDD[Array[Int]] = rdd.sortBy(_(1))

相关问题