こんにちは私のコードでgroupByKey
をよく使う必要がありますが、それは非常に重い操作であることが分かります。パフォーマンスを向上させるために取り組んでいるので、すべてgroupByKey
コールを削除するというアプローチが効率的かどうかは疑問でした。sparkのgroupByKeyをreduceByKeyに置き換えてください
私は別のRDDからRDDとタイプのペア作成(INT、INT)
rdd1 = [(1, 2), (1, 3), (2 , 3), (2, 4), (3, 5)]
を作成するために使用されたと私はこのような何か得るために必要なことから:
[(1, [2, 3]), (2 , [3, 4]), (3, [5])]
私が使用したのはout = rdd1.groupByKey
でしたが、このアプローチは巨大なデータセットでは非常に問題になる可能性があるので、私はこの解決方法を使用すると考えました:
の代わりに、私はタイプのペアから、それを作成してくださいどのようなタイプのペア(INT、INT)の私のRDD rdd1
を作成する(INT、一覧の[int])ので、私のrdd1
この
rdd1 = [(1, [2]), (1, [3]), (2 , [3]), (2, [4]), (3, [5])]
しかし今回は同じ結果に達するために、私はreduceByKey(_ ::: _)
をすべての値をキーで結合しました。このアプローチを使用するとパフォーマンスが向上すると思いますか?私はこのタイプ(Int、List [Int])が唯一の要素を含むリストであるペアを作成するのではないかと恐れていますか?
他の方法を使用して同じ結果に達するより速い方法があると思いますか?ありがとうございました。
I代わりに 'aggregateByKey'または' combineByKey'を使用して、空のリストをインテリアライザーとして使用し、次にそれぞれコンバイナーとマージャーのlist.addとlist.addAllを使用して同じことを考えていました。これは、最初に単一要素のリストを作成することを避けるでしょう。私は、 'groupByKey'が既にこのような場合にうまくいくように最適化されていると信じていました。 – vefthym