マップとして要素を持つRDDがあります。もちろん、RDD.getは使用できません。だから、今のように、私はこのマップのキーの値を取得するには、次の操作を行います。スカラのマップのrddから鍵の値を取得する
val x = RDD.collect().flatten.toMap
、その後
x.get(key)
のキーの値を取得します。今、rddに.collect()を適用しているので、エラーjava.lang.OutOfMemoryError: GC overhead limit exceeded
を出力する本当に大きなrddがあります。 .collect()をrddに適用せずにどうすればいいですか?あなたがに見る必要があるマップのRDDをフィルタリングするためにあなたのドライバ、あなたの最初の必要性にすべてのものに合わせて、それが本当にあるならば取得...
val rdd = sc.parallelize(List(Map("a"->1,"b"->2),Map("c"->3,"d"->4)))
val key = "d"
val filteredRDD = rdd.filter(_.keySet contains key)
if (!filteredRDD.isEmpty) filteredRDD.first.get(key) else None
にフィルタだけフィルタに
flatMap
を回すことができますしたいはずです予想される出力を含む例? – mtoto私に飛びつくことの一つは、収集(「行動」)をあまりに早く呼び出すことです。あなたはあなたのRDDを(うまくいけば)小さなRDDに変換する必要があります - 基本的には、それらの要素を望むキーで欲しいだけです - あなたのRDDにわずかな要素しか持たない最後の時点でcollectを呼び出します。 – Phasmid