apache-spark - 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));
是否可以在加载本身期间应用此过滤条件。如果可以,有人可以建议我如何执行此操作吗?
提前致谢。
解决方案
您不必在这里明确地做任何事情,spark-cassandra-connector 具有谓词下推,因此您的过滤条件将在数据选择期间应用。
来源:https ://github.com/datastax/spark-cassandra-connector/blob/master/doc/14_data_frames.md
连接器将自动将所有有效谓词下推到 Cassandra。数据源还将自动从 Cassandra 中选择完成查询所需的列。这可以通过
explain
命令进行监控。
推荐阅读
- list - 如何在字典中迭代和存储变量?
- node.js - setInterval() 在 azure microsoft 中不起作用
- jenkins - 从当前 Jenkins 控制台日志中提取文本
- google-play-console - Google Play 管理中心新更新中的应用访问
- mysql - 在sql字符串部分搜索
- docker - 设置 docker-compose 卷
- vb.net - 在 BackgroundWorker 中集成 FileSystemWatcher 代码以避免 GUI 冻结
- sql - 在没有 Split_Lines 的情况下将列转换为多行 - SQL Server 2008
- google-maps - 如何使用谷歌地图api在折线中分配信息窗口
- php - Laravel 正在创建缓存,但加载时间相同