私のデータは、どちらかがスパークの場合、削減する最速のデータ構造は何ですか?地図やタプルのリスト?
RDD[Map[String, Map[String, Int]]]
か、第二の例では、データの「マッピング」を見ることができるように
RDD[List[(String, List[(String,Int)])]]
として最初によって強制され、二つの形式のRDDSに存在する可能性がタプルの要素がキーです。私のrddの2つのエントリを考えてみましょう。それらをR1とR2と呼んでください。私はR1とR2のキーでマージします。 R1とR2の両方に同じキーが含まれている場合、これらの値をさらにマージします。例として、その結果のマージがそう
outer_key1 -> (inner_key1 -> 2)
が生成されます、私の質問は、構造がより速く、より多くのメモリ効率的に火花のためにあるデータであり、R1とR2の両方がエントリが含まれていることを
outer_key1 -> (inner_key1 -> 1)
を言います外側キーと内側キーで減らしますか?マップのマップまたは(key、list_of_tuple)のリスト私の直感は、0(1)ルックアップを考えると、地図をキーで減らす方が速いということです。しかし、ほとんどのマップが実装されていることを考えると、マップベースのRDDSにはかなりの無駄なメモリがあると確信しています。
マージのこのタイプの実際の生活の例として、私のRDDSは、私はあなたがRDDのの概念について誤理解したと思う
Map(email_address->(date->number_of_emails_recieved_that_day)) where each RDD contains many email addresses
は、あなたがあなたの内側のデータに対して 'findByKey'アクセスまたは' sequentialAccess'を持っているとのWANかどうかに依存します。 –
RDDは 'RDD [T]'で、 'T'は' Map [String、Map [String、Int]] 'です。それは 'RDD [(K、T)]ではないので、' Key'の意味は何ですか? –