java - 使用 Scala/Java API 基于外部数组的内容进行自定义排序

标签 java scala sorting apache-spark

我有以下数据:-

+-------------+
|    card type|
+-------------+
|ColonialVoice|
| SuperiorCard|
|        Vista|
|  Distinguish|
+-------------+

我有一个自定义顺序数组,我希望按照数组中给定的方式对数据集进行排序。

[ "Distinguish", "Vista", "ColonialVoice", "SuperiorCard"]

预期输出如下:-

+-------------+
|    card type|
+-------------+
|  Distinguish|
|        Vista|
|ColonialVoice|
| SuperiorCard|
+-------------+

如何使用 spark Java API 实现上述自定义排序。 任何人都可以使用任何 API 提供上述帮助吗?

最佳答案

可能的解决方案,假设您有充分的理由想要这样做:

  1. 从该数组创建一个DataFrame
  2. 向该 DataFrame 添加一列 monotonically_increasing_id
  3. 将此 DataFrame 加入您在 card type 列上的原始 DataFrame
  4. monotonically_increasing_id 列排序
  5. 删除 monotonically_increasing_id

在 Scala 中会是:

import org.apache.spark.sql.functions.monotonically_increasing_id

val spark = ...
val df = ...
val order = Array("Distinguish", "Vista", "ColonialVoice", "SuperiorCard")
import spark.implicits._

val orderDF = order.toSeq.toDF
val orderDFWithId = orderDF.withColumn("id", monotonically_increasing_id)
val joined = df.join(orderDFWithId, Seq("card type"), "left_outer")
val sortedDF = joined.orderBy("id").drop("id")

关于java - 使用 Scala/Java API 基于外部数组的内容进行自定义排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56039490/

相关文章:

java - 如何在部署在两个不同 tomcat 实例中的两个 Web 应用程序之间共享 session

generics - 使用泛型和协方差进行 Scala 类型推断,scalac 中可能存在的问题

scala - 计算Scala中元组数组的均值

MySQL SWITCH CASE 多重排序依据

c# - 在列表排序中更改什么以正确排序

php - 如何将平面列表变成嵌套数组?

java - Sonar 显示 DTO 类私有(private)字段存在问题

java - Retrofit 2 : response. body()为空,但状态码为200

scala - 使用进纸器确保 Gatling 中的 CSV 记录

java - OkHttp:避免泄漏连接警告