我目前正在尝试在Data Bricks上使用pysark.pandas库进行一些查询,使用函数read_sql_query。在同一个spark应用程序中,我创建了一些glogal临时视图。
我想要的是使用这个临时表在read_sql_query中执行左连接。
下面是一个例子:
import pyspark.pandas as ps
con = conection_to_db
df = ps.DataFrame(data = {some_data})
df.to_spark().createGlobalTempView('temp_name')
df_query = ps.read_sql_query(sql = f'''SELECT COLUMN_1, COLUMN_2 FROM DB.TABLE AS A
LEFT JOIN global_temp.temp_name AS B on A.COLUMN = B.COLUMN''', con=con)
但我得到了以下错误:
com.microsoft.sqlserver.jdbc.SQLServerException: Invalid object name 'global_temp.temp_name '
我也试过
jdbcDF3 = spark.read \
.format("jdbc") \
.option("url", con) \
.option("query", '''SELECT COLUMN_1, COLUMN_2 FROM DB.TABLE AS A
LEFT JOIN global_temp.temp_name AS B on A.COLUMN = B.COLUMN''') \
.load()
但给了我同样的错误。
我做错了什么?有更好的方法可以用SQL查询将临时视图中的表连接到数据库中的表吗?
我们试图尽可能地接近SQL,因为我们正在将一些SQL从SAS迁移到Data Bricks,因此,有必要创建和连接临时数据,就像我们在SAS中所做的那样。
先谢了!
1条答案
按热度按时间iih3973s1#
这条线
df.to_spark().createGlobalTempView('temp_name')
在Spark Session中创建一个全局临时视图。这一行
向SQL Server发送查询。SQL Server对Spark会话中的全局临时视图一无所知。
要使SQL Server能够引用
df
中的数据,您需要使用spark.write
将其写入SQL Server。