2016-11-24 6 views
1

I持って、次のコードApache Spark SQLは、Cassandraから数十億行を永久に占有していますか?

./spark-shell --conf spark.cassandra.connection.host=170.99.99.134 

コード

を次のようにIはスパークシェルを起動した場合

./spark-shell --conf spark.cassandra.connection.host=170.99.99.134 --executor-memory 15G --executor-cores 12 --conf spark.cassandra.input.split.size_in_mb=67108864 

コード

scala> val df = spark.sql("SELECT test from hello") // Billion rows in hello and test column is 1KB 

df: org.apache.spark.sql.DataFrame = [test: binary] 

scala> df.count 

[Stage 0:> (0 + 2)/13] // I dont know what these numbers mean precisely. 

を次のようにIは、スパークシェルを呼び出します

val df = spark.sql("SELECT test from hello") // This has about billion rows 

scala> df.count 


[Stage 0:=> (686 + 2)/24686] // What are these numbers precisely? 

これらのバージョンはどちらも動作しませんでした。スパークは永遠に動作し続けていますが、15分以上応答がありません。何が間違っている可能性があり、これを修正する方法についてのアイデア?

私は、Spark 2.0.2 を使用していますし、火花カサンドラ・connector_2.11-2.0.0-M3.jarを、それが外部データソースに来るとき、それは非常にスマートではありませんので、

答えて

2

Dataset.countが遅いです。それは(それが良いです)として、クエリを書き換え:

SELECT COUNT(1) FROM table 

ではなく、それだけで実行ダウンCOUNTを押す:

ソースに対して
SELECT 1 FROM table 

(それはあなたのケースで億個のものをフェッチします)と、最終的な結果を得るためにローカルに集約します。表示される数字はタスクカウンターです。

CassandraRDDに最適化されたcassandraCount操作があります:サーバー側の操作について

sc.cassandraTable(keyspace, table).cassandraCount 

詳細はthe documentationで見つけることができます。

関連する問題