1

在从数据框中将数据写入表之前,我正在尝试从表中删除记录。它不适合我......我做错了什么?

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()

谢谢。

4

3 回答 3

1

无需在写入数据框之前删除 sql server 表中的数据,您可以直接使用 .mode("overwrite") 和 .option("truncate",true) 写入数据框。

https://docs.microsoft.com/en-us/sql/big-data-cluster/spark-mssql-connector?view=sql-server-ver15

于 2020-10-14T08:53:02.643 回答
0

Spark 文档说它dbtable用于传递应该读取或写入的表。FROM子句只能在使用 JDBC 连接器读取数据时使用。(资源:https ://spark.apache.org/docs/latest/sql-data-sources-jdbc.html )

我的建议是要么使用overwrite写入模式,要么打开一个单独的连接来删除数据。数据删除和连接 MySQL 服务器不需要 Spark。Python MySQL使用连接器或打开单独的 jdbc 连接就足够了。

于 2020-10-14T10:17:55.560 回答
-1

您不能删除数据,因为数据框是不可变的。您可以进行过滤操作并创建新的数据框并写入您的位置。我认为这样的事情会对您有所帮助。

newdf=spark.sql("select * from xx_files_tbl WHERE value <= 1")

于 2020-10-14T09:44:11.150 回答