为什么在创建 table 时出现 "Hive support is required" 错误?
Why do I get a "Hive support is required" error when creating table?
在 Cloudera 中使用 pyspark,我使用 'hiveContext' 创建了一个数据框。然后我尝试使用 hive 将数据框放入 sql table。
这是我执行此操作的代码:
from pyspark.sql import HiveContext
hiveContext = HiveContext(SpContext)
from pyspark.sql.types import StructType
schema = StructType.fromJson({'fields': [{'metadata': {},
'name': 'Date','nullable': True,'type': 'string'},
{'metadata': {}, 'name': 'Time', 'nullable': True, 'type': 'string'},
{'metadata': {}, 'name': 'Global_active_power', 'nullable': True, 'type': 'integer'},
{'metadata': {}, 'name': 'Global_reactive_power', 'nullable': True, 'type': 'string'},
{'metadata': {},'name': 'Voltage','nullable': True,'type': 'integer'},
{'metadata': {}, 'name': 'Global_intensity', 'nullable': True, 'type': 'integer'},
{'metadata': {}, 'name': 'Sub_metering_1', 'nullable': True, 'type': 'string'},
{'metadata': {}, 'name': 'Sub_metering_2', 'nullable': True, 'type': 'integer'},
{'metadata': {}, 'name': 'Sub_metering_3', 'nullable': True, 'type': 'string'},
],
'type': 'struct'})
power_cons_hive = power_cons
power_cons_hive_df=hiveContext.createDataFrame(power_cons_hive, schema)
然后我注册一个table:
power_cons_hive_df.registerTempTable("mytempTable")
最后,当我执行以下代码时:
hiveContext.sql("CREATE TABLE power_consumption STORED AS ORC AS SELECT * FROM mytempTable")
我收到此错误(我显示了初始错误块,因为有很多错误):
Py4JJavaError: An error occurred while calling o31.sql.
: org.apache.spark.sql.AnalysisException: Hive support is required to use CREATE Hive TABLE AS SELECT;;
CreateTable CatalogTable(
Table: `power_consumption`
Created: Fri Jun 09 10:12:55 PDT 2017
Last Access: Wed Dec 31 15:59:59 PST 1969
Type: MANAGED
Provider: hive
Storage(InputFormat: org.apache.hadoop.hive.ql.io.orc.OrcInputFormat, OutputFormat: org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat, Serde: org.apache.hadoop.hive.ql.io.orc.OrcSerde)), ErrorIfExists
+- Project [Sub_metering_1#141, Sub_metering_3#143]
+- SubqueryAlias mytemptable, `mytempTable`
+- Project [Sub_metering_1#141, Sub_metering_3#143]
+- Project [Sub_metering_1#141, Sub_metering_3#143]
+- Project [Sub_metering_1#141, Sub_metering_3#143]
+- Project [Date#135, Time#136, Global_reactive_power#138, Sub_metering_1#141, Sub_metering_3#143]
+- Project [Date#135, Time#136, Global_reactive_power#138, Sub_metering_1#141, Sub_metering_3#143]
+- LogicalRDD [Date#135, Time#136, Global_active_power#137, Global_reactive_power#138, Voltage#139, Global_intensity#140, Sub_metering_1#141, Sub_metering_2#142, Sub_metering_3#143]
我不确定为什么会这样,因为我相信到目前为止我的代码是正确的并且 Hive 已经启动并且在 Cloudera 管理器中具有 'good health' 状态。
感谢任何帮助。
尝试将选项 --conf spark.sql.catalogImplementation=hive
添加到 spark-submit。
在 Cloudera 中使用 pyspark,我使用 'hiveContext' 创建了一个数据框。然后我尝试使用 hive 将数据框放入 sql table。
这是我执行此操作的代码:
from pyspark.sql import HiveContext
hiveContext = HiveContext(SpContext)
from pyspark.sql.types import StructType
schema = StructType.fromJson({'fields': [{'metadata': {},
'name': 'Date','nullable': True,'type': 'string'},
{'metadata': {}, 'name': 'Time', 'nullable': True, 'type': 'string'},
{'metadata': {}, 'name': 'Global_active_power', 'nullable': True, 'type': 'integer'},
{'metadata': {}, 'name': 'Global_reactive_power', 'nullable': True, 'type': 'string'},
{'metadata': {},'name': 'Voltage','nullable': True,'type': 'integer'},
{'metadata': {}, 'name': 'Global_intensity', 'nullable': True, 'type': 'integer'},
{'metadata': {}, 'name': 'Sub_metering_1', 'nullable': True, 'type': 'string'},
{'metadata': {}, 'name': 'Sub_metering_2', 'nullable': True, 'type': 'integer'},
{'metadata': {}, 'name': 'Sub_metering_3', 'nullable': True, 'type': 'string'},
],
'type': 'struct'})
power_cons_hive = power_cons
power_cons_hive_df=hiveContext.createDataFrame(power_cons_hive, schema)
然后我注册一个table:
power_cons_hive_df.registerTempTable("mytempTable")
最后,当我执行以下代码时:
hiveContext.sql("CREATE TABLE power_consumption STORED AS ORC AS SELECT * FROM mytempTable")
我收到此错误(我显示了初始错误块,因为有很多错误):
Py4JJavaError: An error occurred while calling o31.sql.
: org.apache.spark.sql.AnalysisException: Hive support is required to use CREATE Hive TABLE AS SELECT;;
CreateTable CatalogTable(
Table: `power_consumption`
Created: Fri Jun 09 10:12:55 PDT 2017
Last Access: Wed Dec 31 15:59:59 PST 1969
Type: MANAGED
Provider: hive
Storage(InputFormat: org.apache.hadoop.hive.ql.io.orc.OrcInputFormat, OutputFormat: org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat, Serde: org.apache.hadoop.hive.ql.io.orc.OrcSerde)), ErrorIfExists
+- Project [Sub_metering_1#141, Sub_metering_3#143]
+- SubqueryAlias mytemptable, `mytempTable`
+- Project [Sub_metering_1#141, Sub_metering_3#143]
+- Project [Sub_metering_1#141, Sub_metering_3#143]
+- Project [Sub_metering_1#141, Sub_metering_3#143]
+- Project [Date#135, Time#136, Global_reactive_power#138, Sub_metering_1#141, Sub_metering_3#143]
+- Project [Date#135, Time#136, Global_reactive_power#138, Sub_metering_1#141, Sub_metering_3#143]
+- LogicalRDD [Date#135, Time#136, Global_active_power#137, Global_reactive_power#138, Voltage#139, Global_intensity#140, Sub_metering_1#141, Sub_metering_2#142, Sub_metering_3#143]
我不确定为什么会这样,因为我相信到目前为止我的代码是正确的并且 Hive 已经启动并且在 Cloudera 管理器中具有 'good health' 状态。
感谢任何帮助。
尝试将选项 --conf spark.sql.catalogImplementation=hive
添加到 spark-submit。