我要求从postgres db为我的spark应用程序加载/删除特定记录。为了加载,我使用以下格式的火花数据框
sqlContext.read.format("jdbc").options(Map("url" -> "postgres url",
"user" -> "user" ,
"password" -> "xxxxxx" ,
"table" -> "(select * from employee where emp_id > 1000) as filtered_emp")).load()
要删除数据,我正在编写直接sql而不是使用数据帧
delete from employee where emp_id > 1000
问题是,是否有一种方法可以删除数据库中类似下面的记录?或者唯一的方法是使用直接sql?
sqlContext.read.format("jdbc").options(Map("url" -> "postgres url",
"user" -> "user" ,
"password" -> "xxxxxx" ,
"table" -> "(delete from employee where emp_id > 1000) as filtered_emp")).load()
答案 0 :(得分:1)
如果你想修改(删除记录)实际的数据源,即postgres中的表格,那么Spark就不是一个好方法。 您可以直接使用jdbc客户端来实现相同目的。
如果你想这样做(根据你作为数据帧的一部分计算的一些线索,以分布的方式);您可以使用与数据帧相对应编写的相同jdbc客户端代码,这些代码具有用于删除记录的逻辑/触发器信息,并且可以并行执行多个工作程序。
答案 1 :(得分:0)
我经历过类似的事情,在 Scala 中使用 Java JDBC 库确实会从表中删除行。您可以在此处查看解决方案: Delete rows from Azure Sql table using Azure Databricks with Scala