2016-07-11 3 views
0

배열의 열 articleId 값을 집계해야합니다. 이것은 내가 groupBy으로 미리 작성한 그룹 내에서 수행되어야합니다.Spark SQL : 그룹 내의 열 값 집계

내 표는 다음과 같습니다

| 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.; 

누군가 올바른 진술을 작성할 수 있습니까?

+0

당신을 수행 'SQLContext' 또는'HiveContext'를 사용합니까? –

+0

SQLContext를 사용 중입니다 ... –

답변

0

SQL 구문의 경우 그룹화 할 때이 "something"을 select 문에 포함시켜야합니다. 어쩌면 sparkSQL 코드에서이 점을 지적하지 않았을 것입니다. 당신은 비슷한 질문이

그래서 나는이 collect_list 기능을 사용하여 달성 할 수 SPARK SQL replacement for mysql GROUP_CONCAT aggregate function

0

문제에 대한 해결책 생각하지만, 그것은 당신이 HiveContext를 사용하는 경우에만 사용할 수 :

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

df.groupBy("customerId").agg(collect_list("articleId"))