scala - 如何从 array<struct> 中找到 "lowest"元素?

标签 scala apache-spark apache-spark-sql

我有一个具有以下架构的数据框 -

|-- 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/

相关文章:

python - Pyspark 展平 RDD 错误::太多值无法解压

java - 用于公开大文件的 Spark Thrift 服务器?

python - "' DataFrame ' object has no attribute ' 尝试应用 lambda 以创建新列时应用 '"

Scala Try/Future,在失败时包装异常

scala - 将元组添加到 map ?

java - 为什么 Scala 偶尔会回退到 Java 对象?

python - PySpark groupby 多个时间窗口

java - Gson:java.lang.StackOverflowError: null

scala - 如何过滤包含元组数组的rdd?

python - 将 DataFrame show() 的结果保存到 pyspark 中的字符串