0

以下は私のデータセットです。

user,device,time_spent,video_start
userA,mob,5,1
userA,desk,5,2
userA,desk,5,3
userA,mob,5,2
userA,mob,5,2
userB,desk,5,2
userB,mob,5,2
userB,mob,5,2
userB,desk,5,2

ユーザーごとに以下の集計を調べたい。

   user     total_time_spent        device_distribution
   userA           20                {mob:60%,desk:40%}
   userB           20                {mob:50%,desk:50%}

できればJavaでspark 2.0 APIを使用してこれを達成するのを手伝ってもらえますか。UserDefinedAggregateFunction を使用してみましたが、デバイスごとに各ユーザー グループをグループ化して、各デバイスで費やされた集計時間を見つける必要があるため、グループ内のグループはサポートされていません。

4

2 に答える 2

1

フロラン・モワニー

私の質問に答えてくれてありがとう。

ただし、このソリューションを本番環境にプッシュしたい場合、このソリューションにはいくつかの問題があることがわかりました。

たとえば、TB データソースで可能なデバイスの種類を事前に知る必要があります。この状況では、イベント ピボットも少しわかりにくいです。

Javaでこの問題を完全に解決しました。ここで見ることができます。

この目的のために UserDefinedAggregateFunction を使用しました。UDF は Aggregate の状況に特化しています。

基本的に、最初にユーザーとデバイスでグループ化し、次にこのカスタム UDF を呼び出してデバイスの分布を同時に見つけ、ユーザー レベルで他の集計を行います。

https://github.com/himanshu-parmar-bigdata/spark-java-udf-demo

ありがとう、ヒマンシュ

于 2016-12-31T14:22:38.303 に答える