【问题标题】:How can I group and sort columns in spark.rdd如何对 spark.rdd 中的列进行分组和排序
【发布时间】:2019-12-26 13:37:46
【问题描述】:

我目前有一个这样的数据框

+------------+----------+----------+
|         mac|time      |s         |
+------------+----------+----------+
|aaaaaaaaaaaa|11        |a         |
|aaaaaaaaaaaa|44        |c         |
|bbbbbbbbbbbb|22        |b         |
|aaaaaaaaaaaa|33        |a         |
+------------+----------+----------+

我想使用 .rdd 函数并按“mac”列分组并按“时间”列排序,这是一个示例

res5: Array[(Any, Iterable[(Any, Any)])] = Array((aaaaaaaaaaaa,CompactBuffer((11,a),(33,a),(44,c))), (bbbbbbbbbbbb,CompactBuffer((22,b))))

我已经可以按“mac”列分组,但仍然不能按“时间”排序

df.rdd.map(x=>(x(0),(x(1),x(2)))).groupByKey()

我该怎么做?

【问题讨论】:

标签: scala apache-spark apache-spark-sql rdd


【解决方案1】:

你可以这样做:

scala> val df = Seq(
     |       ("aaaaaaaaaaaa", 11, "a"),("aaaaaaaaaaaa", 44, "c"),("bbbbbbbbbbb", 22, "b"),("aaaaaaaaaaaa", 33, "a")
     |     ).toDF("mac", "time","s")
scala> df.rdd.sortBy(_.apply(1).toString).groupBy(_.apply(0)).collect
res38: Array[(Any, Iterable[org.apache.spark.sql.Row])] = Array((aaaaaaaaaaaa,CompactBuffer([aaaaaaaaaaaa,11,a], [aaaaaaaaaaaa,33,a], [aaaaaaaaaaaa,44,c])), (bbbbbbbbbbbb,CompactBuffer([bbbbbbbbbbbb,22,b])))

谢谢

【讨论】:

  • 一如既往的好和聪明的答案。谢谢!
【解决方案2】:
  df.rdd.map(x=>(x(0),(x(1),x(2)))).groupByKey()
     .mapValues(_.toSeq.sortBy(_._1.asInstanceOf[Int]))

【讨论】:

  • 这很有帮助。非常感谢您的回复。
猜你喜欢
  • 1970-01-01
  • 2020-12-29
  • 1970-01-01
  • 2019-11-20
  • 2021-03-30
  • 1970-01-01
  • 2017-02-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多