在从dataframe向表中写入数据之前,我正在尝试从表中删除记录。这对我不起作用。我做错了什么?
Goal: "delete from xx_files_tbl" before writing new dataframe to table.
query = "(delete from xx_files_tbl)"
spark.write.format("jdbc")\
.option("url", "jdbc:sqlserver://"+server+":1433;databaseName="+db_name)\
.option("driver", driver_name)\
.option("dbtable", query)\
.option("user", user)\
.option("password", password)\
.option("truncate", "true")\
.save()谢谢。
发布于 2020-10-14 16:53:03
您可以使用.mode("overwrite")和.option("truncate",true)直接写入数据帧,而不是在写入数据帧之前删除sql server表中的数据。
https://docs.microsoft.com/en-us/sql/big-data-cluster/spark-mssql-connector?view=sql-server-ver15
发布于 2020-10-14 18:17:56
Spark documentations表示dbtable用于传递应该读取或写入的表。FROM子句只能在使用JDBC连接器读取数据时使用。(资源:https://spark.apache.org/docs/latest/sql-data-sources-jdbc.html)
我的建议是要么使用overwrite写入模式,要么打开一个单独的连接来删除数据。删除数据和连接到MySQL服务器不需要Spark。使用Python MySQL连接器或打开单独jdbc连接就足够了。
发布于 2020-10-14 17:44:11
您不能删除数据,因为数据帧是不可变的。你可以做过滤操作,创建新的数据框,然后像这样写到你的location.Something中,我想这会对你有帮助。
newdf=spark.sql("select * from xx_files_tbl WHERE value <= 1")
https://stackoverflow.com/questions/64343789
复制相似问题