首页 > 解决方案 > Apache Spark + cassandra+Java +Spark 会话过滤记录基于给定 from 和 to 值之间的日期时间

问题描述

我正在开发一个 Spring Java 项目并使用 Datastax 连接器集成 Apache spark 和 cassandra。

我有 autowired sparkSession 并且下面的代码行似乎有效。

Map<String, String> configMap = new HashMap<>();
configMap.put("keyspace", "key1");
configMap.put("table", tableName.toLowerCase());

Dataset<Row> ds = sparkSession.sqlContext().read().format("org.apache.spark.sql.cassandra").options(configMap)
        .load();
ds.show();

在上面的步骤中,我正在加载数据集,在下面的步骤中,我正在过滤 datetime 字段。

String s1 = "2020-06-23 18:51:41";
String s2 = "2020-06-23 18:52:21";

Timestamp from = Timestamp.valueOf(s1);
Timestamp to = Timestamp.valueOf(s2);
ds = ds.filter(df.col("datetime").between(from, to));

是否可以在加载本身期间应用此过滤条件。如果可以,有人可以建议我如何执行此操作吗?

提前致谢。

标签: apache-sparkcassandraapache-spark-sqlspark-cassandra-connector

解决方案


您不必在这里明确地做任何事情,spark-cassandra-connector 具有谓词下推,因此您的过滤条件将在数据选择期间应用。

来源:https ://github.com/datastax/spark-cassandra-connector/blob/master/doc/14_data_frames.md

连接器将自动将所有有效谓词下推到 Cassandra。数据源还将自动从 Cassandra 中选择完成查询所需的列。这可以通过explain命令进行监控。


推荐阅读