我需要聚合列的值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"))