Java 为什么Apache Spark在客户端上执行过滤器
作为apache spark的新手,在spark上获取Cassandra数据时面临一些问题Java 为什么Apache Spark在客户端上执行过滤器,java,apache-spark,out-of-memory,cassandra-2.0,spark-cassandra-connector,Java,Apache Spark,Out Of Memory,Cassandra 2.0,Spark Cassandra Connector,作为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",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);
为什么在客户端应用过滤器,以及如何改进在服务器端应用过滤器
如何在windows平台上的cassandra群集上配置spark群集???没有将cassandra与spark一起使用,通过阅读您提供的部分(谢谢),我看到: 注意:尽管ALLOW FILTERING子句隐式添加到 生成的CQL查询,当前不允许所有谓词 卡桑德拉发动机。这一限制将在下一节中讨论 未来的卡桑德拉版本。目前,ALLOW FILTERING与 由辅助索引或群集列索引的列 我非常确定(但尚未测试)不支持“IN”谓词:请参阅
因此,您可以尝试将where子句限制为Id(假设有二级索引),并对日期范围使用spark筛选。没有将Cassandra与spark一起使用,通过阅读您提供的部分(谢谢),我看到: 注意:尽管ALLOW FILTERING子句隐式添加到 生成的CQL查询,当前不允许所有谓词 卡桑德拉发动机。这一限制将在下一节中讨论 未来的卡桑德拉版本。目前,ALLOW FILTERING与 由辅助索引或群集列索引的列 我非常确定(但尚未测试)不支持“IN”谓词:请参阅
因此,您可以尝试将where子句限制为Id(假设有一个二级索引),并对日期范围使用spark筛选。我建议将中的表作为数据帧而不是RDD读取。Spark 1.3及更高版本中提供了这些选项。然后可以将CQL查询指定为如下字符串:
CassandraSQLContext sqlContext = new CassandraSQLContext(sc);
String query = "SELECT * FROM testing.cf_text where id='Open' and date IN ('2015-01-21','2015-01-22')";
DataFrame resultsFrame = sqlContext.sql(query);
System.out.println(resultsFrame.count());
所以试试看它是否对你更有效
一旦数据帧中有了数据,就可以对其运行Spark SQL操作。如果需要RDD中的数据,可以将数据帧转换为RDD。我建议将表作为数据帧而不是RDD读取。Spark 1.3及更高版本中提供了这些选项。然后可以将CQL查询指定为如下字符串:
CassandraSQLContext sqlContext = new CassandraSQLContext(sc);
String query = "SELECT * FROM testing.cf_text where id='Open' and date IN ('2015-01-21','2015-01-22')";
DataFrame resultsFrame = sqlContext.sql(query);
System.out.println(resultsFrame.count());
所以试试看它是否对你更有效
一旦数据帧中有了数据,就可以对其运行Spark SQL操作。如果需要RDD中的数据,可以将数据帧转换为RDD。在SparkConfig中设置spark.cassandra.input.split.size_in_mb解决了此问题
conf = new SparkConf();
conf.setAppName("Test");
conf.setMaster("local[4]");
conf.set("spark.cassandra.connection.host", "192.168.1.15").
set("spark.executor.memory", "2g").
set("spark.cassandra.input.split.size_in_mb", "67108864");
Spark cassandra连接器读取的Spark.cassandra.input.split.size_的值(单位:mb)错误,因此在SparkConf中重写此值即可。现在IN子句也可以正常工作。在SparkConfig中设置spark.cassandra.input.split.size_IN_mb解决了这个问题
conf = new SparkConf();
conf.setAppName("Test");
conf.setMaster("local[4]");
conf.set("spark.cassandra.connection.host", "192.168.1.15").
set("spark.executor.memory", "2g").
set("spark.cassandra.input.split.size_in_mb", "67108864");
Spark cassandra连接器读取的Spark.cassandra.input.split.size_的值(单位:mb)错误,因此在SparkConf中重写此值即可。现在IN子句也可以正常工作。我会试试DataFrame你知道如何在windows平台上的cassandra群集上配置spark群集吗?我会试试DataFrame你知道如何在windows平台上的cassandra群集上配置spark群集吗?谢谢你给我那个链接,帮我省了一天的时间。谢谢你帮我省了时间每天都给我那个链接。