Spark SQL:聚合组中的列值



我需要聚合列的值articleId数组。这需要在我事先创建的组中完成 groupBy.

我的表如下所示:

| customerId | articleId | articleText | ...
|    1       |     1     |   ...       | ...
|    1       |     2     |   ...       | ...
|    2       |     1     |   ...       | ...
|    2       |     2     |   ...       | ...
|    2       |     3     |   ...       | ...

我想建造类似的东西

| customerId |  articleIds |
|    1       |  [1, 2]     |
|    2       |  [1, 2, 3]  |    

到目前为止我的代码:

DataFrame test = dfFiltered.groupBy("CUSTOMERID").agg(dfFiltered.col("ARTICLEID"));

但在这里我得到了一个AnalysisException

Exception in thread "main" org.apache.spark.sql.AnalysisException: expression 'ARTICLEID' is neither present in the group by, nor is it an aggregate function. Add to group by or wrap in first() (or first_value) if you don't care which value you get.;

有人可以帮助建立一个正确的陈述吗?

对于 SQL 语法,当您要按某些内容分组时,必须在 select 语句中包含此"某些内容"。也许在你的 sparkSQL 代码中,它没有指出这一点。

有类似的问题,所以我认为这是您问题的解决方案 SPARK SQL 替换 mysql GROUP_CONCAT聚合函数

这可以使用collect_list函数来实现,但只有在您使用HiveContext时才可用:

import org.apache.spark.sql.functions._
df.groupBy("customerId").agg(collect_list("articleId"))

相关内容

  • 没有找到相关文章

最新更新