我收到以下错误:
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中执行相同的操作?
答案 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有两种不同类型的观看,Tempview
和globalTempView
,有关详细信息,请参阅帖子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))