求Databricks SQL创建视图语句的PySpark等效实现及DataFrame生成
原Databricks SQL视图的PySpark等效实现
一、创建视图的PySpark写法
对应原SQL的CREATE OR REPLACE VIEW,PySpark可根据视图作用范围选择以下实现方式:
1. 临时视图(当前会话内有效)
from pyspark.sql.functions import last_day, add_months, current_date # 先获取计算结果的DataFrame result_df = spark.sql("SELECT last_day(add_months(current_date(), -1))") # 创建或替换临时视图 result_df.createOrReplaceTempView("myview")
2. 全局临时视图(跨会话有效)
若需在多个Spark会话中访问视图,可使用全局临时视图:
result_df.createOrReplaceGlobalTempView("myview") # 访问时需添加前缀:spark.sql("SELECT * FROM global_temp.myview")
3. 持久化视图(元数据中保存)
要实现和Databricks SQL一致的持久化视图效果,可直接执行Spark SQL语句:
spark.sql("CREATE OR REPLACE VIEW myview AS SELECT last_day(add_months(current_date(), -1))")
二、直接生成对应逻辑的DataFrame
不依赖SQL语法,直接用PySpark API生成包含目标计算结果的DataFrame:
from pyspark.sql.functions import last_day, add_months, current_date # 生成基础空行DataFrame(模拟无表查询场景) base_df = spark.range(1) # 方式1:使用PySpark内置函数直接计算 target_df = base_df.select( last_day(add_months(current_date(), -1)).alias("last_day_of_previous_month") ) # 方式2:使用selectExpr复用SQL语法逻辑 target_df = base_df.selectExpr("last_day(add_months(current_date(), -1)) AS last_day_of_previous_month") # 查看结果 target_df.show()
关键说明
spark.range(1)用于生成一行空数据,作为计算的载体,匹配原SQL无表查询的场景。- PySpark的
last_day、add_months、current_date函数与Databricks SQL同名函数逻辑完全一致,计算结果相同。
内容的提问来源于stack exchange,提问作者Patterson
相关产品推荐
相关产品推荐

