【问题标题】:Cannot Create table with spark SQL : Hive support is required to CREATE Hive TABLE (AS SELECT);无法使用 spark SQL 创建表:创建 Hive TABLE (AS SELECT) 需要 Hive 支持;
【发布时间】:2019-03-03 09:01:24
【问题描述】:

我正在尝试在 spark (scala) 中创建一个表,然后从两个现有数据帧中插入值,但我得到了这个例外:

Exception in thread "main" org.apache.spark.sql.AnalysisException: Hive support is required to CREATE Hive TABLE (AS SELECT);;
'CreateTable `stat_type_predicate_percentage`, ErrorIfExists 

代码如下:

case class stat_type_predicate_percentage (type1: Option[String], predicate: Option[String], outin: Option[INT], percentage: Option[FLOAT])
object LoadFiles1 {

 def main(args: Array[String]) {
    val sc = new SparkContext("local[*]", "LoadFiles1") 
    val sqlContext = new org.apache.spark.sql.SQLContext(sc)
    val warehouseLocation = new File("spark-warehouse").getAbsolutePath
    val spark = SparkSession
        .builder()
        .appName("Spark Hive Example")
        .config("spark.sql.warehouse.dir", warehouseLocation)
        .enableHiveSupport()
        .getOrCreate()       

import sqlContext.implicits._    
import org.apache.spark.sql._       
import org.apache.spark.sql.Row;
import org.apache.spark.sql.types.{StructType,StructField,StringType};

//statistics 
val create = spark.sql("CREATE TABLE stat_type_predicate_percentage (type1 String, predicate String, outin INT, percentage FLOAT) USING hive")
val insert1 = spark.sql("INSERT INTO stat_type_predicate_percentage SELECT types.type, res.predicate, 0, 1.0*COUNT(subject)/(SELECT COUNT(subject) FROM MappingBasedProperties AS resinner WHERE res.predicate = resinner.predicate) FROM MappingBasedProperties AS res, MappingBasedTypes AS types WHERE res.subject = types.resource GROUP BY res.predicate,types.type")

val select = spark.sql("SELECT * from stat_type_predicate_percentage" ) 
  }

我该如何解决?

【问题讨论】:

  • 尝试将.config("spark.sql.catalogImplementation","hive") 添加到您的SparkSession.builder

标签: sql scala apache-spark hive-table


【解决方案1】:

--- 你必须在你的 sparksession 中启用 hive 支持

val spark = new SparkSession
    .Builder()
      .appName("JOB2")
      .master("local")
      .enableHiveSupport()
      .getOrCreate()

【讨论】:

    【解决方案2】:

    这个问题可能有两个方面 对于一个你可能想做@Tanjin 在 cmets 中建议的事情,然后它可能会起作用(尝试将 .config("spark.sql.catalogImplementation","hive") 添加到你的 SparkSession.builder ) 但是,如果您确实想使用现有的配置单元实例及其自己的元数据,您将能够从工作之外查询。或者您可能已经想使用现有的表,您可能希望添加到配置 hive-site.xml 中。

    此配置文件包含一些您可能想要的属性,例如 hive.metastore.uris,这将使您的上下文添加一个新表,该表将保存在存储中。由于包含表和位置的元存储,它将能够从您的配置单元实例中的表中读取。

    【讨论】:

    • 我进行了选择查询并将数据保存为数据框。 val objectQuery = spark.sql("SELECT......") .write .mode(SaveMode.Append) .saveAsTable("stat_resource_predicate_tf") 我不知道我是否必须使用配置单元表!谢谢你的回答!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-18
    • 1970-01-01
    相关资源
    最近更新 更多