尝试将"org.apache.spark.sql.DataFrame"对象转换为 pandas 数据帧会导致数据砖中的错误"name 'dataframe' is not defined"



我正在尝试通过数据砖中的jdbc连接查询SQL数据库,并将查询结果存储为熊猫数据帧。我能在网上找到的所有方法都涉及首先使用 Scala 代码将其存储为一种 Spark 对象,然后将其转换为熊猫。我尝试了单元格 1:

%scala
val df_table1 = sqlContext.read.format("jdbc").options(Map(
("url" -> "jdbc:sqlserver://myserver.database.windows.net:1433;database=mydb"),
("dbtable" -> "(select top 10 * from myschema.table) as table"),
("user" -> "user"),
("password" -> "password123"),
("driver" -> "com.microsoft.sqlserver.jdbc.SQLServerDriver"))
).load()

这导致:

df_table1: org.apache.spark.sql.DataFrame = [var1: int, var2: string ... 50 more fields]

伟大!但是当我尝试将其转换为单元格 2 中的熊猫 df 以便我可以使用它时:

import numpy as np
import pandas as pd 
result_pdf = df_table1.select("*").toPandas()
print(result_pdf)

它会生成错误消息:

NameError: name 'df_table1' is not defined

如何成功地将此对象转换为熊猫数据帧,或者是否有任何方法可以使用python代码通过jdbc连接查询SQL数据库而无需使用Scala(我不是特别喜欢Scala语法,如果可能的话,宁愿避免它(?

我假设您打算使用 python 查询 SQL,如果是这种情况,下面的查询将起作用。

%python
from pyspark import SparkConf, SparkContext
from pyspark.sql import SparkSession
conf = SparkConf()
conf.setMaster("local").setAppName("My app")
sc = SparkContext.getOrCreate(conf=conf)
spark = SparkSession(sc)
database = "YourDBName"
table = "[dbo].[YourTabelName]"
user = "SqlUser"
password  = "SqlPassword"
DF1 = spark.read.format("jdbc") 
.option("url", f"jdbc:sqlserver://YourAzureSql.database.windows.net:1433;databaseName={database};") 
.option("dbtable", table) 
.option("user", user) 
.option("password", password) 
.option("driver", "com.microsoft.sqlserver.jdbc.SQLServerDriver") 
.load()
DF1.show()
table = "[dbo].[someOthertable]"
DF2 = spark.read.format("jdbc") 
.option("url", f"jdbc:sqlserver://YourAzureSql.database.windows.net:1433;databaseName={database};") 
.option("dbtable", table) 
.option("user", user) 
.option("password", password) 
.option("driver", "com.microsoft.sqlserver.jdbc.SQLServerDriver") 
.load()
DF2.show()
Finaldf = DF1.join(DF2,(DF1.Prop_0 == DF2.prop_0),how="inner").select(DF1.Prop_0,DF1.Prop_1,DF2.Address)
Finaldf.show()

最新更新