Spark AnalysisException 未找到全局表或视图
Posted
技术标签:
【中文标题】Spark AnalysisException 未找到全局表或视图【英文标题】:Spark AnalysisException global table or view not found 【发布时间】:2018-03-14 15:22:29 【问题描述】:我收到以下错误:
18/03/14 15:31:11 错误 ApplicationMaster:用户类抛出异常: org.apache.spark.sql.AnalysisException:找不到表或视图: 产品;第 1 行第 42 行
这是我的代码:
val spark = SparkSession
.builder()
.appName("Test")
.getOrCreate()
val products = spark.read.parquet(productsPath)
products.createGlobalTempView("products")
val q1 = spark.sql("SELECT PERCENTILE(product_price, 0.25) FROM products").map(_.getAs[Double](0)).collect.apply(0)
我做错了什么?
不使用sql
是否可以在 Spark 中做同样的事情?
【问题讨论】:
不应该是products.registerTempTable("products")
吗?
@ErnestKiwele:registerTempTable
已弃用。
【参考方案1】:
临时视图
只需使用createOrReplaceTempView
products.createOrReplaceTempView("products")
val q1 = spark.sql("SELECT PERCENTILE(product_price, 0.25) FROM products").map(_.getAs[Double](0)).collect.apply(0)
全球临时视图
如果你使用global temp view,那么你应该这样做
products.createGlobalTempView("products")
val q1 = spark.sql("SELECT PERCENTILE(product_price, 0.25) FROM global_temp.products").map(_.getAs[Double](0)).collect.apply(0)
【讨论】:
【参考方案2】:如果你想使用sql API你可以试试
import org.apache.spark.sql.expressions.Window
val wdw = Window.partitionBy($"Field1", $"Field2").orderBy($"Field".asc)
products.withColumn("percentile",functions.ntile(100).over(wdw))
【讨论】:
【参考方案3】:所有全局临时视图均在 Spark 保留的临时 global_temp
数据库中创建。
下面应该工作-
val q1 = spark.sql("""SELECT PERCENTILE(product_price, 0.25)
FROM global_temp.products""").map(_.getAs[Double](0)).collect.apply(0)
Spark 有 2 种不同类型的视图,Tempview
和 globalTempView
,有关详细信息,请参阅帖子 here。
【讨论】:
以上是关于Spark AnalysisException 未找到全局表或视图的主要内容,如果未能解决你的问题,请参考以下文章
Spark SQL 查询:org.apache.spark.sql.AnalysisException
Spark SQL - org.apache.spark.sql.AnalysisException
org.apache.spark.sql.AnalysisException:无法解析给定的输入列
两个 Spark DataFrame 的简单连接因“org.apache.spark.sql.AnalysisException:无法解析列名”而失败