在写入数据帧之前从 table 中删除记录 - pyspark

Delete records from table before writing dataframe - pyspark

我试图从我的 table 中删除记录,然后再将数据从数据帧写入它。它对我不起作用...我做错了什么?

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

谢谢。

您可以直接使用 .mode("overwrite") 和 .option("truncate",true ).

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

您不能删除数据,因为数据帧是不可变的。您可以执行过滤操作并创建新的数据框并写入您的 location.Something 我认为这会对您有所帮助。

newdf=spark.sql("select * 来自 xx_files_tbl WHERE 值 <= 1")

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

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