【问题标题】:Spark AnalysisException global table or view not foundSpark AnalysisException 未找到全局表或视图
【发布时间】: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 已弃用。

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


【解决方案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 种不同类型的视图,TempviewglobalTempView,有关详细信息,请参阅帖子 here

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-02-24
        • 1970-01-01
        • 2019-01-28
        • 2017-08-02
        • 2023-03-08
        • 1970-01-01
        • 2021-12-10
        相关资源
        最近更新 更多