首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在写入dataframe - pyspark之前从表中删除记录

问在写入dataframe - pyspark之前从表中删除记录
EN

Stack Overflow用户
提问于 2020-10-14 06:01:35
回答 3查看 2K关注 0票数 1

在从dataframe向表中写入数据之前,我正在尝试从表中删除记录。这对我不起作用。我做错了什么?

代码语言:javascript
复制
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()

谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 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

票数 1
EN

Stack Overflow用户

发布于 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连接就足够了。

票数 0
EN

Stack Overflow用户

发布于 2020-10-14 17:44:11

您不能删除数据,因为数据帧是不可变的。你可以做过滤操作,创建新的数据框,然后像这样写到你的location.Something中,我想这会对你有帮助。

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

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64343789

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档