Apache spark 数据未通过SPARK以排序格式写入目标oracle表
我在配置单元中有一个具有以下模式的表 emp_id:int emp_名称:string 我已经从上面的配置单元表创建了数据帧Apache spark 数据未通过SPARK以排序格式写入目标oracle表,apache-spark,pyspark,apache-spark-sql,Apache Spark,Pyspark,Apache Spark Sql,我在配置单元中有一个具有以下模式的表 emp_id:int emp_名称:string 我已经从上面的配置单元表创建了数据帧 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=propert
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")
据我了解,之所以会发生这种情况,是因为在每个数据分区上同时运行多个executor进程,并且通过查询应用的排序被应用于特定分区,并且当多个进程同时向Oracle写入数据时,结果表的排序被扭曲
我进一步尝试将数据重新分区到一个分区(这不是理想的解决方案),然后将数据写入oracle,排序工作正常
有没有办法从SPARK向RDBMS写入排序后的数据;DR在使用关系系统时,绝不应依赖插入顺序。Spark在这里并不重要 关系数据库,包括Oracle,不能保证存储数据的任何内在顺序。存储记录的确切顺序是实现的一个细节,在数据的生命周期中可能会发生变化 Oracle中唯一的例外是: 索引组织表的数据以主键排序方式存储在B树索引结构中 当然,这需要一个能够可靠地确定顺序的主键