scala - 在Spark DataFrame中对结构数组进行排序

标签 scala apache-spark dataframe

考虑以下数据框:

case class ArrayElement(id:Long,value:Double)

val df = Seq(
  Seq(
    ArrayElement(1L,-2.0),ArrayElement(2L,1.0),ArrayElement(0L,0.0)
  )
).toDF("arr")

df.printSchema

root
 |-- arr: array (nullable = true)
 |    |-- element: struct (containsNull = true)
 |    |    |-- id: long (nullable = false)
 |    |    |-- value: double (nullable = false)

除了使用udf之外,还有一种方法可以按arrvalue进行排序?

我看过org.apache.spark.sql.functions.sort_array,在复杂数组元素的情况下,此方法实际上在做什么?它是否按第一个元素(即id)对数组进行排序

最佳答案

spark functions说:“根据数组元素的自然顺序,按升序对给定列的输入数组进行排序。”

在解释之前,让我们看一下sort_array的一些示例。

+----------------------------+----------------------------+
|arr                         |sorted                      |
+----------------------------+----------------------------+
|[[1,-2.0], [2,1.0], [0,0.0]]|[[0,0.0], [1,-2.0], [2,1.0]]|
+----------------------------+----------------------------+

+----------------------------+----------------------------+
|arr                         |sorted                      |
+----------------------------+----------------------------+
|[[0,-2.0], [2,1.0], [0,0.0]]|[[0,-2.0], [0,0.0], [2,1.0]]|
+----------------------------+----------------------------+

+-----------------------------+-----------------------------+
|arr                          |sorted                       |
+-----------------------------+-----------------------------+
|[[0,-2.0], [2,1.0], [-1,0.0]]|[[-1,0.0], [0,-2.0], [2,1.0]]|
+-----------------------------+-----------------------------+

因此sort_array的排序方式是先检查第一个元素,然后检查第二个元素,依此类推,对已定义列中数组中的每个元素进行排序

我希望它清楚

关于scala - 在Spark DataFrame中对结构数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47507767/

相关文章:

python - 如何将条形图与 plt 或 pandas 直方图中的刻度标签对齐(绘制多列时)

scala - List.view 和 LazyList 有什么区别?

java - JAX-RPC 1.1 中的公共(public)默认构造函数错误

python - 如何在 Pandas 中将字节对象类型转换为日期时间

python - from_json Pyspark SQL函数: default value for not found keys?

hadoop - 使用 Yarn 客户端在 Google Cloud 上的 Hadoop 中运行 JAR

python - 在条件下合并来自两个不同数据帧的两列,python

mongodb - 如何在 ReactiveMongo 模型中表示 GeoJSON 点?

java - 如何从 Scala 中的辅助构造函数访问字段?

scala - build.sbt - 对 monorepo 中常见设置的子项目进行迭代