2016-10-11 9 views
0

私は現在、グループ012DDのRDDを持っています。下に示すように、IDは000406106-01、コードは496、個々のイベントはそれぞれDiagnosticケースクラスです。私が望んでいたことは、((id, code), count of events)という形式のRDDを取得することでした。本質的には、私はCompactBufferのオブジェクトをDiagnostic個のイベントに集約してイベントの数にしたいと思っていました。助言がありますか?ケースクラスのリストをケースクラスの数に減らす

ID   CODE    EVENT1              EVENT2 
((000406106-01,496),CompactBuffer(Diagnostic(000406106-01,Sun Apr 16 02:24:00 UTC 2006,496), Diagnostic(000406106-01,Fri Jul 20 15:30:00 UTC 2012,496), Diagnostic(000406106-01,Tue Dec 23 17:00:00 UTC 2014,496), Diagnostic(000406106-01,Wed Jan 06 20:45:00 UTC 2010,496), Diagnostic(000406106-01,Fri Mar 04 16:30:00 UTC 2011,496), Diagnostic(000406106-01,Sun Aug 04 04:51:00 UTC 2013,496), Diagnostic(000406106-01,Fri Mar 11 16:00:00 UTC 2011,496), Diagnostic(000406106-01,Tue Jul 10 13:45:00 UTC 2012,496), Diagnostic(000406106-01,Wed Jun 15 20:00:00 UTC 2005,496), Diagnostic(000406106-01,Tue Dec 29 13:30:00 UTC 2009,496), Diagnostic(000406106-01,Fri Jul 13 13:30:00 UTC 2012,496), Diagnostic(000406106-01,Thu Jul 26 03:40:00 UTC 2007,496), Diagnostic(000406106-01,Mon Jun 13 14:45:00 UTC 2005,496), Diagnostic(000406106-01,Wed Dec 24 18:00:00 UTC 2014,496), Diagnostic(000406106-01,Thu Mar 03 15:45:00 UTC 2011,496), Diagnostic(000406106-01,Wed Dec 31 15:00:00 UTC 2014,496), Diagnostic(000406106-01,Sat Jul 26 04:39:00 UTC 2008,496), Diagnostic(000406106-01,Thu Dec 31 20:30:00 UTC 2009,496))) 

は私が探しています:

 ID  CODE COUNT 
((000406106-01,496), 20) 

編集:明確さのために、ここでRDDは、上記生成されている方法は次のとおりです。診断はのグループ化されていないRDDある

val grpDiag = diagnostic.groupBy(diag => (diag.id, diag.code)) 

上記のデータ。

答えて

2

タプルの2番目の要素はCompactBufferであり、あなたが必要とするすべては、その長さである_.sizemapValuesはあなたに必要な結果を与える必要がある場合:一般的に

rdd.mapValues(_.size) 

をあなただけcountを見つけるためにグループ化することは避けてください代わりにreduceByKeyを使用してください。

val diagnostics: RDD[Diagnostic] = ??? 
diagnostics.map(d => ((d.id, d.code), 1L)).reduceByKey(_ + _) 
関連する問題