Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark spark下推筛选器如何与cassandra表非分区键一起工作?_Apache Spark_Cassandra_Spark Cassandra Connector - Fatal编程技术网

Apache spark spark下推筛选器如何与cassandra表非分区键一起工作?

Apache spark spark下推筛选器如何与cassandra表非分区键一起工作?,apache-spark,cassandra,spark-cassandra-connector,Apache Spark,Cassandra,Spark Cassandra Connector,我在cassandra中有一个表,其中日期不是分区键的一部分,而是集群键的一部分。在spark中读取表格时,我正在应用日期过滤器,它被向下推。我想了解下推是如何工作的,因为通过cql我们不能直接查询集群键。数据是否在某处被过滤 Java实现: transactions.filter(transactions.col("timestamp").gt(timestamp)) //column timestamp is of type timestamp 而实际的计划是 ==实际计划== *项目[

我在cassandra中有一个表,其中日期不是分区键的一部分,而是集群键的一部分。在spark中读取表格时,我正在应用日期过滤器,它被向下推。我想了解下推是如何工作的,因为通过cql我们不能直接查询集群键。数据是否在某处被过滤

Java实现:

transactions.filter(transactions.col("timestamp").gt(timestamp))  //column timestamp is of type timestamp
而实际的计划是

==实际计划== *项目[客户\用户\ id67作为客户11,casttimestamp66作为日期112,城市70] +-*过滤器isnotnulltimestamp66&&isnotnullcity70 +-*扫描org.apache.spark.sql.cassandra。CassandraSourceRelation@571db8b4[customer_user_id67,timestamp66,city70]PushedFilters:[IsNotNulltimestamp,*GreaterThantimestamp,2018-08-13 00:00:00.0,IsNotNullcity],ReadSchema:struct


同样,对于时间戳部分,这工作正常,但如果列的类型是date,那么即使date是分区键的一部分,它也不会推送过滤器。我必须以事务的形式编写它。filterdate>=将“+timestamp+”转换为日期才能使它工作。列日期的类型为date

当您对分区键没有条件时,Spark Cassandra connector使用令牌范围并行执行有效扫描。因此,如果您对某个集群列clasCol BERGER有条件,如您的示例所示,连接器将生成以下查询伪代码,而不是真实代码-如果启用调试日志记录,您可以找到真实的CQL查询:

SELECT col1, col2, ... FROM ks.table WHERE
  token(pk) > :startRange AND token(pk) <= :endRange
  AND clasCol > :your-value ALLOW FILTERING;
然后Cassandra将对同一节点上的多个分区执行有效范围扫描。如果你想要更多的细节,你可以寻找


关于日期-这需要更多地查看代码,但可能只是缺少某种类型转换,或者类似的情况-您可以检查为这两种情况生成了哪些查询。

这意味着,Cassandra connector本身使用filter on Clustering键为查询添加了允许筛选。如果我错了,请纠正我?