scala 找不到Spark Analysis异常全局表或视图

yshpjwxd  于 2022-11-09  发布在  Scala
关注(0)|答案(3)|浏览(148)

我得到以下错误:
18/03/14 15:31:11 Error ApplicationMaster:User类引发异常:org.apache.park.sql.Analysis异常:未找到表或视图:Products;第1行pos 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中做同样的事情?

bf1o4zei

bf1o4zei1#

临时视图

只需将createOrReplaceTempView用作

products.createOrReplaceTempView("products")

val q1 = spark.sql("SELECT PERCENTILE(product_price, 0.25) FROM products").map(_.getAs[Double](0)).collect.apply(0)

全局临时视图

如果您使用全局临时视图,则应执行

products.createGlobalTempView("products")

val q1 = spark.sql("SELECT PERCENTILE(product_price, 0.25) FROM global_temp.products").map(_.getAs[Double](0)).collect.apply(0)
kjthegm6

kjthegm62#

如果您想使用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))
6yjfywim

6yjfywim3#

所有全局临时视图都是在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有两种不同类型的视图,TempviewglobalTempView,更多详细信息请参见文章here

相关问题