使用PySpark的spark.sql查询DataFrame时提示表未找到,求排查方案
解决Spark SQL中"Table or view not found"错误
问题原因
你通过spark.read.parquet()得到的dt_orig是DataFrame对象,但spark.sql()执行SQL语句时,只会识别注册到Spark Catalog中的表或视图,无法直接读取Python变量名,因此抛出Table or view not found异常。
解决方案
方案1:将DataFrame注册为临时视图
把DataFrame注册成Spark会话可识别的临时视图,之后就能在SQL语句中使用视图名查询:
from pyspark.sql import SparkSession from pyspark.sql import functions as fun from pyspark.sql.functions import lit, expr import pandas as pd dt_orig = spark.read.parquet(file_path) # 注册会话级临时视图,会话关闭后自动失效 dt_orig.createOrReplaceTempView("dt_orig") dt_final = spark.sql("select * from dt_orig")
若需要跨Spark会话访问,可注册全局临时视图:
dt_orig.createOrReplaceGlobalTempView("dt_orig") # 查询全局视图需添加global_temp前缀 dt_final = spark.sql("select * from global_temp.dt_orig")
方案2:直接使用DataFrame API操作
如果无需使用SQL语句,直接调用DataFrame的API即可实现相同逻辑:
dt_orig = spark.read.parquet(file_path) dt_final = dt_orig.select("*")
内容的提问来源于stack exchange,提问作者Sophia
相关产品推荐
相关产品推荐

