scala - Spark SQL:如果存在则更新,否则忽略
问题描述
有没有办法快速执行处理 Spark SQL 并存储到 Kudu 的“如果存在则更新,否则忽略”?
背景是:物联网平台,接收到的大量数据和平台资源有限。我正在使用 Spark Streaming 将数据插入/更新到 Kudu 存储中。
连接的设备发送 2 种消息:
- 第一条消息:一条完整的消息(id device, id session, device data, session data)
- 所有其他消息都是重要的:)id 设备、id 会话、会话数据)
由于资源限制,我的意图是使用单表模型:
- 当我收到第一条消息时,我将其插入
- 当收到其他消息时,更新注册表。
但生活并不完美,有时“第一”的信息会丢失,无法坚持。在这种情况下,我想“忽略”设备,这就是我不能使用 upsert 的原因。
我放弃了存储部分消息的可能性,然后删除所有设备数据为空的消息,因为扫描和删除正在消耗我有限的资源。
我发现的唯一方法是执行连接以查找现有的 PK 并更新其相应的注册表,这也消耗了大量资源。
所以问题是,如果存在更新,则插入可用,如果存在更新,如何忽略它可以实现以优化方式“updateIfExists”spark DF?
谢谢
解决方案
推荐阅读
- salesforce - Talend 与 salesforce 的连接很慢
- android - 如何交换授权代码以从 Android 获取访问代码和刷新令牌?
- .net - Azure Blob 存储 SDK v12 - BlobClient DownloadAsync 消失了吗?
- reactjs - 如何修复错误--->“DeepMap”类型上不存在属性“名称”
- python - 测试用例的并行执行不适用于 pytest-html-reporter 报告
- google-fit - 使用多个传感器时,Google Fit REST API 步骤结果与应用编号不匹配
- pandas - 尝试使用 excel pandas 读取数据...并在多个文件中出现一致的错误
- binding - 从 Svelte 中的父组件与 Slot 通信
- r - 使用登录表单(shinyauthr 包)运行 Shiny 应用程序时出错:`filter()` 输入 `..1` 出现问题。我输入`..1`
- firebase - 如何以 Firebase 作为后端部署 expo react 本机应用程序?