![](/img/trans.png)
[英]Python to SQL Connection. Trying to push pandas dataframe to SQL Server
[英]Trying to Push Records from a Dataframe to a SQL Server Table
我试图找到一种方法将数据帧中的所有内容推送到 SQL Server 表中。 我做了一些谷歌搜索并想出了这个。
Cluster.write \
.format("jdbc") \
.option("url", "jdbc:sqlserver://name_here.database.windows.net:1433;databaseName=db_name") \
.option("dbtable", "dbo.Cluster") \
.option("user", "u_name") \
.option("password", "p_wd") \
.save()
我的数据框名为“Cluster”,它的类型为 pyspark.sql.dataframe.DataFrame。 如果该表存在于数据库中,当我运行上面的代码时,会收到以下错误消息:
org.apache.spark.sql.AnalysisException: Table or view 'dbo.Cluster' already exists. SaveMode: ErrorIfExists.;
如果我删除表并运行上面的代码,我会收到以下错误消息:
java.lang.IllegalArgumentException: Can't get JDBC type for struct<type:tinyint,size:int,indices:array<int>,values:array<double>>
这应该是可行的。 我之前在 Spark 环境中做过这个; 该代码工作得很好。 现在,我在 Python 环境中工作(使用 Databricks),并且我坚持这一件事。
为了完整起见,我正在以这种方式创建数据框:
df = spark.read \
.jdbc("jdbc:sqlserver://name_here.database.windows.net:1433;databaseName=db_name", "dbo.table_name",
properties={"user": "u_name", "password": "p_wd"})
然后……我做了一些分析和数据……最终我对数据应用了一些 ML 算法……并提出了两个数据帧。
df1 = df1.select("*").toPandas()
df2 = df2("*").toPandas()
现在,我需要将这两个数据帧连接在一起。
Cluster = pd.concat([df1, df2], axis=1)
最后,我想将此数据框推送到 SQL Server 表中。 一切都很好,直到我最终尝试将所有内容从数据框放到表格中。 这是我在这里唯一的问题。
您可以尝试使用不同的 SaveMode.Either Append 添加数据:
Cluster.write \
.format("jdbc") \
.option("url", "jdbc:sqlserver://name_here.database.windows.net:1433;databaseName=db_name") \
.option("dbtable", "dbo.Cluster") \
.option("user", "u_name") \
.option("password", "p_wd") \
.mode("append") \
.save()
或覆盖以替换数据:
Cluster.write \
.format("jdbc") \
.option("url", "jdbc:sqlserver://name_here.database.windows.net:1433;databaseName=db_name") \
.option("dbtable", "dbo.Cluster") \
.option("user", "u_name") \
.option("password", "p_wd") \
.mode("overwrite") \
.save()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.