即使使用PySpark存在表,如何写入Microsoft SQL Server表

时间:2015-10-11 13:52:56

标签: apache-spark pyspark

我有一个PySpark代码,可以像这样写入SQL Server数据库

 df.write.jdbc(url=url, table="AdventureWorks2012.dbo.people", properties=properties)

然而问题是我想继续写表人,即使表存在,我在Spark文档中看到有可能的选项错误,追加,覆盖和忽略模式,所有这些都抛出错误,如果表已存在于数据库中,则对象已存在。

火花抛出跟随错误     py4j.protocol.Py4JJavaError:调用o43.jdbc时发生错误。     com.microsoft.sqlserver.jdbc.SQLServerException:已经存在一个名为' people'的对象。在数据库中

即使表已经退出,有没有办法将数据写入表中? 请告诉我您需要更多解释

2 个答案:

答案 0 :(得分:1)

对我来说,问题出在Spark 1.5.2上。它检查表是否存在(here)的方法是运行SELECT 1 FROM $table LIMIT 1。如果查询失败,则表格不存在。即使桌子在那里,该查询也会失败。

在1.6.0(here)中将其更改为SELECT * FROM $table WHERE 1=0

答案 1 :(得分:0)

因此appendoverwrite模式在表已存在时不会抛出错误。从spark文档(http://spark.apache.org/docs/latest/sql-programming-guide.html#save-modesSaveMode.Append将"将DataFrame保存到数据源时,如果数据/表已经存在,则DataFrame的内容应该附加到现有数据。 "并且SaveMode.Overwrite将"覆盖模式意味着在将DataFrame保存到数据源时,如果数据/表已经存在,则预期现有数据将被DataFrame的内容覆盖。"根据您希望如何处理现有表格,这两者中的一个应该可能满足您的需求。