You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 17:35:19