我尝试使用 Synapse Notebook 将视图的前 100 行从 SQL 数据库存储到数据帧。我尝试过使用这段代码:
%%pyspark
df = spark.sql("SELECT DataType, TableName, ColumnName FROM dbo.ExternalTableSchema LIMIT 100")
df.show()
但即使我已经确认视图名称是正确的,我仍然会收到以下错误。
我还尝试了上面代码的变体:
%%pyspark
df = spark.sql("SELECT TOP (100) [DataType], [TableName], [ColumnName] FROM [dbo].[ExternalTableSchema]")
df.show()
但是我收到了如下所示的不同错误。我不确定如何解决这个问题。任何帮助将不胜感激!
我尝试过以下方法:
from pyspark.sql import SparkSession
jdbcHostname = "dilisqlsrv.database.windows.net"
jdbcDatabase = "db02"
jdbcPort = "1433"
username = "dilip"
password = "Welcome@1"
jdbcUrl = "jdbc:sqlserver://{0}:{1};database={2}".format(jdbcHostname, jdbcPort, jdbcDatabase)
query = "(SELECT * FROM DepartmentView) AS tmp"
df = spark.read \
.format("jdbc") \
.option("url", jdbcUrl) \
.option("dbtable", query) \
.option("user", username) \
.option("password", password) \
.option("driver", "com.microsoft.sqlserver.jdbc.SQLServerDriver") \
.load()
df.show()
结果:
+------+---------+-----------+---------------+
|DeptID| DeptName| Location| Manager|
+------+---------+-----------+---------------+
| 1| Sales| New York| John Smith|
| 2|Marketing|Los Angeles| Jane Doe|
| 3| Finance| Chicago|Michael Johnson|
| 4| HR| Houston| Emily Brown|
+------+---------+-----------+---------------+
在上面的代码中我设置了JDBC连接参数 使用下推查询将数据读取到 DataFrame 中。
正如您提到的,您需要查询前 100 行,您可以使用以下内容
query = "(SELECT TOP 100 * FROM YourTableName) AS tmp"
以下是使用 Spark.sql 的方法
tableName = "DepartmentView"
spark.read \
.format("jdbc") \
.option("url", jdbcUrl) \
.option("dbtable", tableName) \
.option("user", username) \
.option("password", password) \
.option("driver", "com.microsoft.sqlserver.jdbc.SQLServerDriver") \
.load() \
.createOrReplaceTempView("temp_table")
top100_rows_df = spark.sql("SELECT * FROM temp_table LIMIT 100")
top100_rows_df.show()
结果:
+------+---------+-----------+---------------+
|DeptID| DeptName| Location| Manager|
+------+---------+-----------+---------------+
| 1| Sales| New York| John Smith|
| 2|Marketing|Los Angeles| Jane Doe|
| 3| Finance| Chicago|Michael Johnson|
| 4| HR| Houston| Emily Brown|
+------+---------+-----------+---------------+
在上面的代码中,将 Azure SQL 数据库表注册为临时视图。 使用spark.sql执行SQL查询读取前100行