apache-spark - 当一个查询插入和一个同时更改同一张表时会发生什么?
问题描述
如果一个或多个进程试图将数据附加到表中,而一个或多个进程同时试图改变表,会发生什么?
假设我们有一个名为 db.table 的表(按带列分区):
band |name |age
---------------------------
1 abc 18
1 xyz 20
2 aaa 18
2 bbb 19
3 ccc 22
4 ddd 28
更改命令:
spark.sql("alter table db.table add columns (year_of_birth int, salary double, city string)")
数据附加:
df = spark.sql("select 5 as band, 'fff' as name, 33 as age")
df.write.partitionBy('band').mode('append').saveAsTable('db.table')
这里 df.write 和 spark.sql(alter command) 由多个进程同时执行。在这种情况下 spark 的行为是什么?
解决方案
tl; dr简单,不会发生任何令人惊讶的事情,因为要写入的数据将在该数据(作为表格)被附加到之前加载。
此外,附加查询是安全的,因为它们会添加数据(实际上并未真正按行修改)。
推荐阅读
- javascript - 如何在 WebdriverIO 中使用参数构建 xpath
- html - 形状内的表单域
- python - 如何将离散值拟合到正态分布中,然后生成随机样本?
- python - 为什么我收到 MySQL 和 Peewee Traceback 错误
- html - 为什么我的 figcaption 出现在图片的右上角?
- text - AppleScript - 如何将文本附加到文件末尾
- c++ - Cerrno 不工作,但 strerror 工作,在 Xcode (11.6)
- vue.js - 如何导入 grid.js html 函数以在 Vue 中使用格式化程序
- wordpress - WordPress 图像重复 - 正在创建许多额外的尺寸,我可以删除它们吗?
- r - 无法在 CentOS 7 和 R 4 上安装 rtracklayer