我有一个具有以下架构的数据框 -
|-- ID: string (nullable = true)
|-- VALUES: array (nullable = true)
| |-- element: struct (containsNull = true)
| | |-- _v1: string (nullable = true)
| | |-- _v2: string (nullable = true)
值(value)观就像 -
[["1","a"],["2","b"],["3","c"],["4","d"]]
[["4","g"]]
[["3","e"],["4","f"]]
我想采用最小整数的值,即 结果 df 应该看起来像 - (现在是 StructType,而不是 Array[Struct])
["1","a"]
["4","g"]
["3","e"]
有人可以指导我如何通过创建 udf 来解决这个问题吗? 提前致谢。
最佳答案
为此您不需要 UDF。只需使用 sort_array
并选择第一个元素即可。
df.show
+--------------------+
| data_arr|
+--------------------+
|[[4,a], [2,b], [1...|
| [[1,a]]|
| [[3,b], [1,v]]|
+--------------------+
df.printSchema
root
|-- data_arr: array (nullable = false)
| |-- element: struct (containsNull = false)
| | |-- col1: string (nullable = false)
| | |-- col2: string (nullable = false)
import org.apache.spark.sql.functions.sort_array
df.withColumn("first_asc", sort_array($"data_arr")(0)).show
+--------------------+---------+
| data_arr|first_asc|
+--------------------+---------+
|[[4,a], [2,b], [1...| [1,c]|
| [[1,a]]| [1,a]|
| [[3,b], [1,v]]| [1,v]|
+--------------------+---------+
关于scala - 如何从 array<struct> 中找到 "lowest"元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46975851/