2016-07-11 18 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構文の場合、何かをグループ化する場合、この「何か」を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")) 
関連する問題