apache-spark - 可以在每个微批次中查找 Cassandra
问题描述
我们正在使用结构化流并尝试对源数据进行一些重复数据删除。如果 id col 在 20 天内重复,我们需要更新最早的事件时间。20 天可能有 10-150 亿行。我们不想使用 dropDuplicates 因为状态可能很大。我们正在考虑使用 Cassandra 表来存储状态(比如到目前为止的 id 和 min time)。每次微批次触发时,我们都会在微批次中查找带有 id 的 Cassandra 表存储状态。20天的ids也在10-150亿级别,或者说Cassandra中的状态表在10-150亿级别。那么在每个微批次中查找或加入这个 Cassandra 表是否可行?
解决方案
Spark Cassandra 连接器在 RDD API 中有 2 个对应的函数joinWithCassandra
:允许 leftJoinWithCassandra
通过主键在 Cassandra 中执行有效的数据查找,如下所示:
val joinWithRDD = someRDD.joinWithCassandraTable("test","table")
连接器的开源版本中的 DataFrame/DataSet API 不支持与 Cassandra 功能的连接,但作为 DSE Analytics 一部分的连接器(所谓的DSE Direct Join)支持连接器。但是您可以将数据转换为 RDD 并通过现有 API 执行连接。
推荐阅读
- maven - 如何用java11创建竹插件
- android - Gradle 5.1.1 更新打破了我在 Android 中的 proguard 规则
- javascript - axios如何分离获取数组对象
- python - 如何删除从 python 中使用 pypdf2 提取的条形码中提取的整个非 ascii 字符串?说不是条形码下面的文字
- python-3.x - 如何对路径变量进行字符串拆分并仅打印/使用最后一个分隔的索引项
- .net - 检查树是否是堆
- repo - 我在初始化存储库时遇到问题,这会引发以下错误
- javascript - 如何隐藏 HTML 表格行
- python - 如何在子图的角落放置一个字母,包括轴标签(不是轴的角落)
- idris - 使用`map`遍历递归数据结构时如何通过整体检查