Spark AnalysisException未找到全局表或视图

时间:2018-03-14 15:22:29

标签: scala apache-spark apache-spark-sql spark-dataframe

我收到以下错误:

  

18/03/14 15:31:11错误ApplicationMaster:用户类引发了异常:   org.apache.spark.sql.AnalysisException:找不到表或视图:   产品;第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中执行相同的操作?

3 个答案:

答案 0 :(得分:1)

所有全局临时视图都在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

答案 1 :(得分:1)

TEMPORARY VIEW

只需使用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 :(得分:1)

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