我在hive中有一个带有以下架构的表 EMP_ID:INT EMP_NAME:字符串
我已经从上面的hive表
创建了数据框df = sql_context.sql('SELECT * FROM employee ORDER by emp_id')
df.show()
运行上面的代码后,我看到数据在emp_id上正确排序
我正在尝试通过以下代码将数据写入Oracle表
df.write.jdbc(url=url, table='target_table', properties=properties, mode="overwrite")
根据我的理解,这是因为多个执行程序进程在每个数据分区上同时运行,并且通过查询应用的排序已应用于特定分区,并且当多个进程同时向Oracle写入数据时表排序失真
我进一步尝试将数据重新分区到一个分区(这不是理想的解决方案)并将数据写入oracle,排序正常工作
有没有办法从SPARK
将分类数据写入RDBMS答案 0 :(得分:1)
TL; DR 使用关系系统时,不应该依赖于插入顺序。 Spark在这里并不重要。
关系数据库(包括Oracle)不保证存储数据的任何内在顺序。存储记录的确切顺序是实现的细节,并且可以在数据的生命周期内发生变化。
Oracle中唯一的例外是Index Organized Tables,其中:
索引组织表的数据以主键排序方式存储在B树索引结构中。
这当然需要一个可以可靠地确定顺序的主键。