我有以下数据:-
+-------------+
| card type|
+-------------+
|ColonialVoice|
| SuperiorCard|
| Vista|
| Distinguish|
+-------------+
我有一个自定义顺序数组,我希望按照数组中给定的方式对数据集进行排序。
[ "Distinguish", "Vista", "ColonialVoice", "SuperiorCard"]
预期输出如下:-
+-------------+
| card type|
+-------------+
| Distinguish|
| Vista|
|ColonialVoice|
| SuperiorCard|
+-------------+
如何使用 spark Java API 实现上述自定义排序。 任何人都可以使用任何 API 提供上述帮助吗?
最佳答案
可能的解决方案,假设您有充分的理由想要这样做:
- 从该数组创建一个
DataFrame
- 向该
DataFrame
添加一列monotonically_increasing_id
- 将此
DataFrame
加入您在card type
列上的原始DataFrame
- 按
monotonically_increasing_id
列排序 - 删除
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/