Apache Spark の初心者であり、Spark で Cassandra データを取得する際に問題に直面しています。
List<String> dates = Arrays.asList("2015-01-21","2015-01-22");
CassandraJavaRDD<A> aRDD = CassandraJavaUtil.javaFunctions(sc).
cassandraTable("testing", "cf_text",CassandraJavaUtil.mapRowTo(A.class, colMap)).
where("Id=? and date IN ?","Open",dates);
このクエリは、cassandra サーバー上のデータをフィルタリングしていません。この Java ステートメントが実行されている間、メモリが消費され、最終的に spark java.lang.OutOfMemoryError 例外がスローされます。https://github.com/datastax/spark-cassandra-connector/blob/master/doc/3_selection.mdに記載されているように、クエリはクライアント側ではなく cassandra サーバーでデータを除外する必要があります。
cassandra cqlsh でフィルターを使用してクエリを実行している間、正常に実行されますが、フィルター (where 句) を使用せずにクエリを実行すると、予期されるタイムアウトが発生します。したがって、spark がクライアント側でフィルターを適用していないことは明らかです。
SparkConf conf = new SparkConf();
conf.setAppName("Test");
conf.setMaster("local[8]");
conf.set("spark.cassandra.connection.host", "192.168.1.15")
クライアント側でフィルターが適用される理由と、サーバー側でフィルターを適用するためにどのように改善できるか。
Windows プラットフォームで Cassandra クラスターの上に Spark クラスターを構成するにはどうすればよいでしょうか??