0

私は5億の行を持つCassandraテーブルを持っています。私はスパークを使用してカサンドラのパーティションキーであるフィールドに基づいてフィルタを適用したいと思います。Sparkの巨大なデータフレームでの効率的なフィルタリング

非常に大きいリストキーに基づいて、Spark/Spark SQLでフィルタリングする可能な限り最良の方法を提案できますか。

基本的には、キーのリストにあるCassandraテーブルの行だけが必要です。

私たちはDSEとその機能を使用しています。 私が使っているアプローチは、およそ1時間ほどかかっています。

+0

大きなリストではどういう意味ですか? – mtoto

+0

2つのデータセットを結合したいと思います。 500万以上のレコードとキーのリスト(つまり、object_id)を持つCassandraテーブル。最終結果は、リスト内のobject_idが一致するカスドンドラ表の行のみである必要があります。私は時間の負荷を取っている結合を使用していると私はそれを防止したい –

答えて

1

repartitionByCassandraReplicajoinWithCassandraTableをチェックしましたか?

https://github.com/datastax/spark-cassandra-connector/blob/75719dfe0e175b3e0bb1c06127ad4e6930c73ece/doc/2_loading.md#performing-efficient-joins-with-cassandra-tables-since-12

joinWithCassandraTable RDDはそう何の非必要な データが要求されていないか、シリアライズされるソースで必要とされるすべてのパーティションのために単一 クエリを実行するためにJavaドライブを利用しています。つまり、 RDDとCassandra Table間の結合は、テーブル のフルテーブルを実行せずに実行できます。同一の パーティションキーを共有する2つのCassandraテーブル間で実行すると、マシン間でのデータの移動は必要ありません。 すべての場合、この方法では、ソースRDDのパーティショニングとデータローカリティ用の 配置を使用します。

複製指定されたテーブルの戦略と 鍵空間と一致するようにRDDのデータ を再配置するために使用することができるrepartitionByCassandraReplica方法。この方法では、与えられたRDDの のパーティションキー情報を検索し、これらの値を使用して、 クラスタ内のどのノードがそのデータを担当するのかを判断します。

関連する問題