ClassCastException: InMemoryCatalog не может быть приведен к HiveExternalCatalog в искре

Я создаю объект HiveContext в одной из моих программ после создания SQLContext. Первоначально я читаю данные из базы данных MySQL через JDBC, используя SQLContext, а после чтения я выгружаю их в Hive, используя HiveContext. Но это с ошибкой ниже.

2017-12-20 02:53:46 Driver [INFO ] SparkSqlParser - Parsing command: CREATE TABLE IF NOT EXISTS default.jdbchive (`name` string,`number` bigint,`bool` boolean,`ip` string,`gp` string) STORED AS TEXTFILE
2017-12-20 02:53:46 Driver [ERROR] SparkBatchSubmitter - Failed to start the driver for jbbchive
java.lang.ClassCastException: org.apache.spark.sql.catalyst.catalog.InMemoryCatalog cannot be cast to org.apache.spark.sql.hive.HiveExternalCatalog
    at org.apache.spark.sql.hive.HiveSessionState.catalog$lzycompute(HiveSessionState.scala:47)
    at org.apache.spark.sql.hive.HiveSessionState.catalog(HiveSessionState.scala:45)
    at org.apache.spark.sql.hive.HiveSessionState$$anon$1.<init>(HiveSessionState.scala:60)
    at org.apache.spark.sql.hive.HiveSessionState.analyzer$lzycompute(HiveSessionState.scala:60)
    at org.apache.spark.sql.hive.HiveSessionState.analyzer(HiveSessionState.scala:59)
    at org.apache.spark.sql.execution.QueryExecution.assertAnalyzed(QueryExecution.scala:48)
    at org.apache.spark.sql.Dataset$.ofRows(Dataset.scala:63)
    at org.apache.spark.sql.SparkSession.sql(SparkSession.scala:592)
    at org.apache.spark.sql.SQLContext.sql(SQLContext.scala:699)
    at com.test.spark.core.pipeline.SparkBatchSubmitter.getContext(SparkBatchSubmitter.java:302)
    at com.test.spark.core.pipeline.SparkBatchSubmitter.submit(SparkBatchSubmitter.java:93)
    at com.test.deploy.SaxDriver.main(SaxDriver.java:34)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.apache.spark.deploy.yarn.ApplicationMaster$$anon$2.run(ApplicationMaster.scala:646)

Логика создания контекста Hive:

hiveContext = new HiveContext(rowRDD.context()).newSession();

Кто-нибудь знает, как решить эту проблему?

0 ответов

Другие вопросы по тегам