8
データセットのsortPartitionメソッドは、指定されたいくつかのフィールドに基づいてデータセットをローカルにソートします。 Flinkで大規模なデータセットを効率的に並べ替えるにはどうすればよいですか?Apache Flinkでのグローバルソート
データセットのsortPartitionメソッドは、指定されたいくつかのフィールドに基づいてデータセットをローカルにソートします。 Flinkで大規模なデータセットを効率的に並べ替えるにはどうすればよいですか?Apache Flinkでのグローバルソート
Flinkは組み込みレンジ分割戦略をまだ提供していないため、これは現在簡単には実現できません。
この問題を回避するには、カスタムPartitioner
を実装することです:
DataSet<Tuple2<Long, Long>> data = ...
data
.partitionCustom(new Partitioner<Long>() {
int partition(Long key, int numPartitions) {
// your implementation
}
}, 0)
.sortPartition(0, Order.ASCENDING)
.writeAsText("/my/output");
は注意:カスタムパーティショナとバランスの取れたパーティションを達成するために、キーの値の範囲と分布について知っておく必要があります。
Apache Flinkでレンジ・パーティショニング(自動サンプリングあり)のサポートは現在work in progressであり、すぐに利用可能になります。
編集(2016年6月7日):バージョン1.0.0のApache Flinkにレンジ分割が追加されました。次のようにグローバルにソートデータを設定することができますサンプルに等しいサイズのパーティションのデータ分布を計算するために設定された入力データを分割範囲
DataSet<Tuple2<Long, Long>> data = ...
data
.partitionByRange(0)
.sortPartition(0, Order.ASCENDING)
.writeAsText("/my/output");
注意。
1-データセットについての洞察がない場合、どのようにパーティションを分割できますか? 2-私たちはそうする方法を見つけると仮定します。このコマンドはグローバルソートされたデータセットを出力しますか? –
1)それは良い点です。カスタムパーティショナーを実装する場合は、バランスの取れたパーティションを実現するためのキーの値の範囲と分布について知っておく必要があります。リンクされたプル要求内の範囲パーティショナーは、自動的にデータをサンプリングして配布を取得します。 2)はい、パーティションを範囲指定し、各パーティションを同じキーにソートすると、出力はグローバルにソートされます。 –