在 Scala 中对数据集 [String] 进行排序

Posted

技术标签:

【中文标题】在 Scala 中对数据集 [String] 进行排序【英文标题】:Sort a Dataset[String] in Scala 【发布时间】:2019-08-02 09:01:32 【问题描述】:

我有 dsString: Dataset[(String,Long)](没有 DataFrame 或 Dataset[Row]),我正在尝试按 Long 订购 .orderBy(_._2)

我的问题是.orderBy().sort() 只接受列,而我只能将.sortBy 与RDD 一起使用。

DataFrame 解决方案

dsString.toDF("a", "b")
  .groupBy("b")

RDD解决方案:

 dsString.toJavaRDD
    .sortBy(_._2)

Dataset[(String,Long)] 怎么会这样做?

【问题讨论】:

【参考方案1】:

数据集也可以应用 orderBy。例如,

+---+---+
| _1| _2|
+---+---+
|  c|  3|
|  b|  5|
|  a|  4|
+---+---+

这是我的数据集和

df2.orderBy(col("_1").desc).show
df2.orderBy(col("_2").asc).show

给出如下结果:

+---+---+
| _1| _2|
+---+---+
|  c|  3|
|  b|  5|
|  a|  4|
+---+---+


+---+---+
| _1| _2|
+---+---+
|  c|  3|
|  a|  4|
|  b|  5|
+---+---+

【讨论】:

以上是关于在 Scala 中对数据集 [String] 进行排序的主要内容,如果未能解决你的问题,请参考以下文章

在Scala中对列表/序列进行模式匹配时解决类型擦除问题

跨数据集行的数组元素总和 - Spark Scala

如何在 Scala 中对对象进行模式匹配

Spark数据集和scala.ScalaReflectionException:类型V不是类

是否可以在 Scala 中对变量进行元组赋值? [复制]

如何在 Scala Spark 中对 RDD 进行排序?