CREATE Hive TABLE (AS SELECT) 需要 Hive 支持

Posted

技术标签:

【中文标题】CREATE Hive TABLE (AS SELECT) 需要 Hive 支持【英文标题】:Hive support is required to CREATE Hive TABLE (AS SELECT) 【发布时间】:2018-05-30 00:13:49 【问题描述】:

我计划将 spark 数据框保存到 hive 表中,以便我可以查询它们并从中提取纬度和经度,因为 Spark 数据框不可迭代。

使用 jupyter 中的 pyspark,我编写了这段代码来创建 spark 会话:

import findspark
findspark.init()
from pyspark import SparkContext, SparkConf
from pyspark.sql import SparkSession

#readmultiple csv with pyspark
 spark = SparkSession \
.builder \
.appName("Python Spark SQL basic example") \
.config("spark.sql.catalogImplementation=hive").enableHiveSupport() \
.getOrCreate()

 df = spark.read.csv("Desktop/train/train.csv",header=True);

 Pickup_locations=df.select("pickup_datetime","Pickup_latitude",
                          "Pickup_longitude")

 print(Pickup_locations.count())

然后我运行 hiveql:

df.createOrReplaceTempView("mytempTable") 
spark.sql("create table hive_table as select * from mytempTable");

我得到这个错误:

 Py4JJavaError: An error occurred while calling o24.sql.
 : org.apache.spark.sql.AnalysisException: Hive support is required to      CREATE Hive TABLE (AS SELECT);;
 'CreateTable `hive_table`,    org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe, ErrorIfExists
+- Project [id#311, vendor_id#312, pickup_datetime#313,    dropoff_datetime#314, passenger_count#315, pickup_longitude#316,     pickup_latitude#317, dropoff_longitude#318, dropoff_latitude#319,     store_and_fwd_flag#320, trip_duration#321]​

【问题讨论】:

你控制如何运行 spark 吗?我的意思是你能改变 submit-spark 命令参数吗? 【参考方案1】:

我以前也遇到过这种情况。您需要将配置参数传递给 spark-submit 命令,以便它将 hive 视为您的 spark sql 的目录实现。

以下是 spark 提交的样子:

spark-submit --deploy-mode cluster --master yarn --conf spark.sql.catalogImplementation=hive  --class harri_sparkStreaming.com_spark_streaming.App  ./target/com-spark-streaming-2.3.0-jar-with-dependencies.jar

诀窍在于:--conf spark.sql.catalogImplementation=hive

希望对你有帮助

【讨论】:

以上是关于CREATE Hive TABLE (AS SELECT) 需要 Hive 支持的主要内容,如果未能解决你的问题,请参考以下文章

使用 --create-hive-table 直接在 hive 中导入 mysql 表 (sqoop)

使用 create-hive-table 在 Hive 中创建表时如何使用自定义分隔符

何时将 CREATE TABLE AS SELECT 与 CREATE TABLE LIKE?

如何使用 sqoop import-mainframe --create-hive-table 命令定义 hive 表结构

insert table 和create table as 区别

MySQL create table as与create table like对比