尝试将“ org.apache.spark.sql.DataFrame”对象转换为熊猫数据框会导致错误“ Databricks中未定义名称“ dataframe””

问题描述 投票:0回答:1

我正在尝试通过数据块中的jdbc连接查询SQL数据库,并将查询结果存储为pandas数据框。我可以在此在线找到的所有方法都涉及先使用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中的pandas 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

我如何成功地将此对象转换为pandas数据框,或者可以使用python代码通过jdbc连接查询SQL数据库,而根本不需要使用Scala(我不特别喜欢Scala语法,宁愿避免如果可能的话)?

pandas scala apache-spark jdbc databricks
1个回答
0
投票

我假设您打算使用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"

DF = 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()
DF.show()
© www.soinside.com 2019 - 2024. All rights reserved.