私は次のタイプでRDDがあるとします。私は、リスト全体が同じワーカーに配置されていることを並列化レベル
RDD[(Long, List(Integer))]
を想定することはできますか?私は、特定の操作がRDDレベルで受け入れ可能か、またはドライバで計算されるべきかどうかを知りたい。例えば:List
はaggregate
の結果または任意の他の操作であってもよく、必ずしも一体に作成されないことに注意
val data: RDD[(Long, List(Integer))] = someFunction() //creates list for each timeslot
ください。
val diffFromMax = data.map(item => (item._1, findDiffFromMax(item._2)))
def findDiffFromMax(data: List[Integer]): List[Integer] = {
val maxItem = data.max
data.map(item => (maxItem - item))
}
事はそれがmaxItem
は、ネットワークトラフィックの多くを引き起こす可能性が計算配布されList
です。これは、次のタイプのRDDで処理することができます。
RDD[(Long, Integer /*Max Item*/,List(Integer))]
ここで、max項目はドライバで計算されます。
そこで質問(実際には2つの質問)、次のとおりです。- RDDデータのどの時点で私は、データが1つのワーカーに位置していることを前提とすることができますか? (医師または個人の評価を参考にした回答があれば)タプルの内部でタプルの場合にはどうなりますか:
((Long, Integer), Double)
? - タプルでアルゴリズムを設計する一般的な方法は何ですか?私はいつもそのデータを別の労働者に見えるかのように扱うべきですか? (Long、(Strong、Double))であるか、タイムライン(Long)でユーザー(String)にデータがある場合は、最初のタプルフィールドの最小粒度((Long、String)、Double)または多分(String、(Long、Double))?またはこれは最適ではないかもしれませんし、行列が良いですか?
Thxリストの代わりにParArrayがある場合はどうでしょうか?単一のレコードであるタプルにまだ残っているので問題になりませんか?私のケースがRDDの場合(ParArray [(Long、Integer)]]すべてのParArrayは単一のレコードですか? –
別の質問は、そのキーとバレルのペアから、タプル内の同じ最初の要素を持つタプルが一緒に配置される* ALL *と言うことができますか?私は、再転換せずに参加することができますか? –
この点に関して、RDDはRDD [T]と定義され、ここで、Tはレコードタイプであり、レコードは常に単一のパーティション内にある。 TをParArray [(Long、Integer)]にすると、単一のレコードになります。もちろん、レコードが大きすぎる場合は、おそらくOOMの例外または同様の問題が発生するので、それを超えてはいけません。説明のために –