gpt4 book ai didi

apache-spark-sql - Spark Dataframe 中的聚合数组类型

转载 作者:行者123 更新时间:2023-12-04 08:34:14 24 4
gpt4 key购买 nike

我有一个 DataFrame 命令:

+-----------------+-----------+--------------+
| Id| Order | Gender|
+-----------------+-----------+--------------+
| 1622|[101330001]| Male|
| 1622| [147678]| Male|
| 3837| [1710544]| Male|
+-----------------+-----------+--------------+

我想对 Id 和 Gender 进行分组,然后汇总订单。我正在使用 org.apache.spark.sql.functions 包,代码如下所示:

DataFrame group = orders.withColumn("orders", col("order"))
.groupBy(col("Id"), col("Gender"))
.agg(collect_list("products"));

但是,由于列 Order 是数组类型,所以我得到了这个异常,因为它需要一个基本类型:

User class threw exception: org.apache.spark.sql.AnalysisException: No handler for Hive udf class org.apache.hadoop.hive.ql.udf.generic.GenericUDAFCollectList because: Only primitive type arguments are accepted but array<string> was passed as parameter 1

我查看了包,有数组的排序函数,但没有聚合函数。知道怎么做吗?谢谢。

最佳答案

在这种情况下,您可以定义自己的函数并将其注册为 UDF

val userDefinedFunction = ???
val udfFunctionName = udf[U,T](userDefinedFunction)

Then 而不是 then 将该列传递到该函数内部,以便将其转换为基本类型,然后将其传递到 with Columns 方法中。

像这样:

val dataF:(Array[Int])=>Int=_.head

val dataUDF=udf[Int,Array[Int]](dataF)


DataFrame group = orders.withColumn("orders", dataUDF(col("order")))
.groupBy(col("Id"), col("Gender"))
.agg(collect_list("products"));

希望一切顺利!

关于apache-spark-sql - Spark Dataframe 中的聚合数组类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38117360/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com