2017-04-03 5 views
0

私はApache Sparkを使ってスカラとAkkaでcassandraデータベースを使用することを検討しています。私は実際に私の既存のCassandraドライバを落としてSparkを独占的に使用できるかどうかの問題を解決しようとしています。それはパーティションキーなどでレコードを見つける手段を持っているのですか、それともテーブル全体をフィルタリングしてフィルタリングすることしかできません。私はあなたが単一のレコードにフィルターをかけることができますが、潜在的に大量のテーブルを反復することを意味します。私はspartに本質的にCQLを発行して句を指定し、句を選択した場合は1つの行だけ、または行のセットを取得できるようにします。これが不可能な場合は、通常のDB操作のために私の既存のドライバを使用して解析を開始する必要があります。Apache Sparkは、一般的な非アナリティクスOLTPタスクに適しています。

答えて

1

CassandraRDD.whereとスパークでの句()

は、行をフィルタするには、スパークが提供するフィルタ変換を使用することができますCQLを発行することが可能です。ただし、この方法では、すべての行がCassandraからフェッチされ、Sparkによってフィルタリングされます。また、CPUサイクルによっては、結果に含まれないオブジェクトのシリアライズとデシリアライズが無駄になります。このオーバーヘッドを回避するために、CassandraRDDはあなたがここに仕える

に設定された行はCassandraRDD.whereを(使用方法の簡単な例であるフィルタリングするために、任意のCQL条件(複数可)を渡すことができますどこ方法、)

を提供しています

あなたがテーブル

CREATE TABLE test.data (
    id int PRIMARY KEY, 
    data text 
); 

を持っている場合あなたが選択し、主キーでフィルタリングするために火花を使用することができます。

sc.cassandraTable("test", "data ").select("id", "data").where("id = ?", 1).toArray.foreach(println) 

より:https://github.com/datastax/spark-cassandra-connector/blob/master/doc/3_selection.md

しかし、カサンドラ・ドライバでは、あなたのクエリをより柔軟に制御を持っているともスパークはあなたにカサンドラのドライバーよりも多くのCPU時間とメモリの費用がかかります。 RussSとして

「これが正しいとwhere句を使用すると、単一のパーティション要求を実行することができますが、これは直接Javaドライバを通じて類似したクエリを実行するよりも桁違いに高価である」言います
+0

これは正解、ありがとうございます。何か警告があるかどうか分かります。これがうまくいけば、私の主なカランドラコネクタマネージャーとしてスパークを使いたいと思う。 –

+1

これは間違いなく、where句では単一のパーティション要求を実行できますが、これはJavaドライバから直接的に類似クエリを実行するよりも高価です。 – RussS

+0

ありがとう、私はこれを答えとして受け入れました。私はOLTPのための基本ドライブを使用し、RDDのもののために火花をつけます。 –

関連する問題