2016-03-21 6 views
0

apache sparkでは、 'category'列は常に 'a'または 'b'であるというデータフレームがあります。列の変数の数の列を追加する

 
user_id | category 
==================== 
1  | a 
1  | a 
1  | b 
2  | a 
2  | b 
2  | b 

私はそれらのカウントのために列 'a'と列 'b'を作りたいと思っています。 私が望む結果は以下の通りです。

 
user_id | a | b 
=============== 
1  | 2 | 1 
2  | 1 | 2 
+1

検査カウントは、グループによると、PIVOT ...それは簡単クエリだとあなたがそれを行うことができ、戻ってきて、私はあなたがあなたのVeljkoを – Veljko89

+0

ありがとうお手伝いします! –

答えて

2

あなたはこのために、条件付き集約を使用することができます。

SELECT user_id, 
     COUNT(CASE WHEN category = 'a' THEN 1 END) AS a 
     COUNT(CASE WHEN category = 'b' THEN 1 END) AS b 
FROM mytable 
GROUP BY user_id 
+1

このソリューションでは、 'category'のすべての可能な値が何であるかを事前に知る必要があります。 @DavidGriffin。 –

+2

。 。 。質問はかなり明確です。「「カテゴリ」は常に「a」または「b」です。 –

1

これは、アップフロントabを知らなくてもそれを行います。

df.groupBy($"id").pivot("category").count().show 
+0

あなたの答えをありがとう! df.groupBy($ "id")。pivot( "category"、['a'、b '])。count()。show() ' リスト[' a '、' b ']を使用します。 "[reshaping-data-with-spark-in-spark](https://databricks.com/blog/2016/02/09/reshaping-data-with-pivot-in-spark.html)"も私に役立ちます。 –

0

おかげですべてを。 整合性については、リスト['a'、 'b']を使ってピボットメソッドを使用しました。あなたがしようとした後に問題が発生した場合

df.groupBy($"id").pivot("category", ['a', 'b']).count().show 
関連する問題