2016-04-09 11 views
1

私の仕事の場合、アソシエーションキーに基づいてマージする2つの大きなDataFramesがあります。 joinを使用すると、タスクの完了に時間がかかります。Cogroup on Spark DataFrames

Apache Sparkの結合よりも好ましいのはcogroupです。誰でもDataFrames上でcogroupを使用する方法を指摘したり、2つの大きなFataFramesをマージするためのより良い方法を提案することができます。

答えて

2

DataFramecogroup機能のいずれかの同等のものを提供していないと複雑なオブジェクトは、スパークSQLで第一級オブジェクトではありません、ありがとうございました。複雑な構造で使用できる一連の操作はかなり制限されているため、一般的にカスタム表現を作成したり、UDFを使用したり、パフォーマンスのペナルティを支払う必要があります。さらに、Spark SQLは、同じjoinロジックをプレーンRDDsとして使用しません。

RDDについて。 がjoinより好都合であるかもしれない境界ケースが存在するが、典型的には、完全なデータセットの結果 - >デカルト積でない限り、そうであってはならない。 RDD上のすべての結合がcogroupとそれに続くflatMapValuesを使用して表され、後者の操作がローカルなので、実際のオーバーヘッドは出力タプルの作成だけです。

テーブルにプリミティブ型だけが含まれている場合は、最初にcollect_listという列を集約することで、共同グループのような動作を模倣することができますが、ここではパフォーマンスは期待できません。

+0

'' 'cogroup''が' 'join''よりも好都合なケースがたくさんあります。 '' 'Cogroup''は' '' groupBy''セマンティクスを持つ結合演算子です。データを文脈に入れることは非常に便利です。複雑なオブジェクトはまだSparkのファーストクラスの市民ではありませんが、読み込み時に結合の必要性を取り除くことで、インパラのパフォーマンスが大幅に向上します。 – jwinandy