微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在写入数据框之前从表中删除记录-pyspark

如何解决在写入数据框之前从表中删除记录-pyspark

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

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)来写入数据帧,而不是在写入数据帧之前删除sql server表中的数据。

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

,

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

newdf = spark.sql(“从xx_files_tbl的WHERE值

,

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。