1

RDD を使用する場合、RDD 内の項目をキーでグループ化しました。

    val pairRDD = oldRDD.map(x => (x.user, x.product)).groupByKey

pairRDDタイプは次のとおりです。RDD(Int, Iterable[Int]))

私が問題を抱えているのは、単に特定の要素にアクセスすることです。キーで RDD のアイテムにアクセスできないように見える場合、キーを持っていることのポイントは何ですか?

現時点ではfilter、RDD を 1 つの項目にまとめましたが、まだ RDD があるためforeach、RDD を印刷する必要があります。

    val userNumber10 = pairRDD.filter(_._1 == 10)
    userNumber10.foreach(x => println("user number = " + x._1))

または、filterRDD を実行してtake(1)、サイズ 1 の配列を返すこともできます。

    val userNumber10Array = pairRDD.filter(_._1 == 10).take(1)

その代わりに、返された配列の最初の要素を選択できます。

    val userNumber10Array = pairRDD.filter(_._1 == 10).take(1)(0)

必要に応じてペアを返します。しかし...明らかに、これは不便であり、これはRDDの使用方法ではないと言うことで推測する危険があります!

なぜ私はこれをしているのですか?まあ、それが起こった理由は、自分のテスト目的でRDDに何があったかを単に「見たい」からです。それで、RDD(より厳密にはpairRDD)の個々のアイテムにアクセスする方法はありますか?もしそうなら、どのように? そうでない場合、pairRDD の目的は何ですか?

4

1 に答える 1

4

lookupに属する関数を使用しますPairRDDFunctions。公式ドキュメントから:

キー key の RDD の値のリストを返します。キーがマップされるパーティションのみを検索することで、RDD に既知のパーティショナーがある場合、この操作は効率的に実行されます。

https://spark.apache.org/docs/0.8.1/api/core/org/apache/spark/rdd/PairRDDFunctions.html

また、RDD の内容を表示したいだけの場合は、単に を呼び出しますcollect

于 2015-03-20T16:48:38.693 に答える