在按用户分组的数据帧中聚合时无法执行用户定义的函数

巴布

我有一个如下的数据框,我正在尝试获取用户 groupby 名称的 max(sum)。

+-----+-----------------------------+
|name |nt_set                       |
+-----+-----------------------------+
|Bob  |[av:27.0, bcd:29.0, abc:25.0]|
|Alice|[abc:95.0, bcd:55.0]         |
|Bob  |[abc:95.0, bcd:70.0]         |
|Alice|[abc:125.0, bcd:90.0]        |
+-----+-----------------------------+

下面是我用来获取用户的 max(sum) 的 udf

val maxfunc = udf((arr: Array[String]) => {
val step1 = arr.map(x => (x.split(":", -1)(0), x.split(":", -1)(1))).groupBy(_._1).mapValues(arr => arr.map(_._2.toInt).sum).maxBy(_._2)
val result = step1._1 + ":" + step1._2
result})

当我运行 udf 时,它抛出以下错误

 val c6 = c5.withColumn("max_nt", maxfunc(col("nt_set"))).show(false)

错误:无法执行用户定义的函数($anonfun$1: (array) =>string)

我如何以更好的方式实现这一点,因为我需要在更大的数据集中做到这一点

预期的结果是

expected result:
+-----+-----------------------------+
|name |max_nt                       |
+-----+-----------------------------+
|Bob  |abc:120.0                    |
|Alice|abc:220.0                    |
+-----+-----------------------------+
狮子座

您的核心逻辑maxfunc正常工作,只是它应该处理 post-groupBy 数组列,它是一个嵌套Seq集合:

val df = Seq(
  ("Bob", Seq("av:27.0", "bcd:29.0", "abc:25.0")),
  ("Alice", Seq("abc:95.0", "bcd:55.0")),
  ("Zack", Seq()),
  ("Bob", Seq("abc:50.0", null)),
  ("Bob", Seq("abc:95.0", "bcd:70.0")),
  ("Alice", Seq("abc:125.0", "bcd:90.0"))
).toDF("name", "nt_set")

import org.apache.spark.sql.functions._

val maxfunc = udf( (ss: Seq[Seq[String]]) => {
  val groupedSeq: Map[String, Double] = ss.flatMap(identity).
    collect{ case x if x != null => (x.split(":")(0), x.split(":")(1)) }.
    groupBy(_._1).mapValues(_.map(_._2.toDouble).sum)

  groupedSeq match {
    case x if x == Map.empty[String, Double] => ("", -999.0)
    case _ => groupedSeq.maxBy(_._2)
  }
} )

df.groupBy("name").agg(collect_list("nt_set").as("arr_nt")).
  withColumn("max_nt", maxfunc($"arr_nt")).
  select($"name", $"max_nt._1".as("max_key"), $"max_nt._2".as("max_val")).
  show
// +-----+-------+-------+
// | name|max_key|max_val|
// +-----+-------+-------+
// | Zack|       | -999.0|
// |  Bob|    abc|  170.0|
// |Alice|    abc|  220.0|
// +-----+-------+-------+

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

无法在Spark(Scala)的数据帧上执行用户定义的功能

来自分类Dev

Pyspark:无法执行用户定义的函数($anonfun$1: (double) => double)

来自分类Dev

PySpark SQL中的用户定义的聚合函数

来自分类Dev

错误:无法执行聚合函数 SQL

来自分类Dev

sudo组中的用户无法执行sudo操作

来自分类Dev

用户无法执行截取表的过程

来自分类Dev

具有数据表聚合的用户定义函数

来自分类Dev

用户定义的函数将多个数据帧导出到全局环境中

来自分类Dev

在Apache Derby中创建用户定义的聚合函数

来自分类Dev

在Apache Derby中创建用户定义的聚合函数

来自分类Dev

KDB:表上的用户定义的聚合函数

来自分类Dev

SQL:用户定义类型的聚合函数

来自分类Dev

如何编写用户定义的聚合函数?

来自分类Dev

无法执行具有超级用户特权的文件

来自分类Dev

Fish:该用户无法执行该文件

来自分类Dev

在find -exec调用中执行用户定义的函数

来自分类Dev

在find -exec调用中执行用户定义的函数

来自分类Dev

如何将用户自定义函数列明智地应用于熊猫中的分组数据

来自分类Dev

用户定义的函数输入可循环数据帧的每一行

来自分类Dev

PHP函数无法执行

来自分类Dev

无法执行 .each() 函数

来自分类Dev

从Apache Spark SQL中的用户定义的聚合函数(UDAF)返回多个数组

来自分类Dev

我如何在data.table中的用户定义函数中获取分组列的值

来自分类Dev

Postgres用户定义的聚合函数未正确分配值

来自分类Dev

使用用户定义的功能在R中聚合数据

来自分类Dev

无法执行变量php中返回的函数

来自分类Dev

在 find -exec 调用中执行用户定义的函数并根据参数选择该函数的版本

来自分类Dev

用户定义函数破坏pyspark数据框

来自分类Dev

无法登录到root用户:无法执行q:没有这样的文件或目录

Related 相关文章

  1. 1

    无法在Spark(Scala)的数据帧上执行用户定义的功能

  2. 2

    Pyspark:无法执行用户定义的函数($anonfun$1: (double) => double)

  3. 3

    PySpark SQL中的用户定义的聚合函数

  4. 4

    错误:无法执行聚合函数 SQL

  5. 5

    sudo组中的用户无法执行sudo操作

  6. 6

    用户无法执行截取表的过程

  7. 7

    具有数据表聚合的用户定义函数

  8. 8

    用户定义的函数将多个数据帧导出到全局环境中

  9. 9

    在Apache Derby中创建用户定义的聚合函数

  10. 10

    在Apache Derby中创建用户定义的聚合函数

  11. 11

    KDB:表上的用户定义的聚合函数

  12. 12

    SQL:用户定义类型的聚合函数

  13. 13

    如何编写用户定义的聚合函数?

  14. 14

    无法执行具有超级用户特权的文件

  15. 15

    Fish:该用户无法执行该文件

  16. 16

    在find -exec调用中执行用户定义的函数

  17. 17

    在find -exec调用中执行用户定义的函数

  18. 18

    如何将用户自定义函数列明智地应用于熊猫中的分组数据

  19. 19

    用户定义的函数输入可循环数据帧的每一行

  20. 20

    PHP函数无法执行

  21. 21

    无法执行 .each() 函数

  22. 22

    从Apache Spark SQL中的用户定义的聚合函数(UDAF)返回多个数组

  23. 23

    我如何在data.table中的用户定义函数中获取分组列的值

  24. 24

    Postgres用户定义的聚合函数未正确分配值

  25. 25

    使用用户定义的功能在R中聚合数据

  26. 26

    无法执行变量php中返回的函数

  27. 27

    在 find -exec 调用中执行用户定义的函数并根据参数选择该函数的版本

  28. 28

    用户定义函数破坏pyspark数据框

  29. 29

    无法登录到root用户:无法执行q:没有这样的文件或目录

热门标签

归档