使用 Hive 表时 Spark 提交抛出错误

Spark submit throws error while using Hive tables

我有一个奇怪的错误,我正在尝试将数据写入配置单元,它在 spark-shell 中运行良好,但是当我使用 spark-submit 时,它抛出 database/table not found默认错误。

以下是我尝试在 spark-submit 中编写的代码,我使用的是 spark 2.0.0 的自定义版本

 val sqlContext = new org.apache.spark.sql.SQLContext(sc)
sqlContext.table("spark_schema.iris_ori")

以下是我正在使用的命令,

/home/ec2-user/Spark_Source_Code/spark/bin/spark-submit --class TreeClassifiersModels --master local[*] /home/ec2-user/Spark_Snapshots/Spark_2.6/TreeClassifiersModels/target/scala-2.11/treeclassifiersmodels_2.11-1.0.3.jar /user/ec2-user/Input_Files/defPath/iris_spark SPECIES~LBL+PETAL_LENGTH+PETAL_WIDTH RAN_FOREST 0.7 123 12

错误如下,

16/05/20 09:05:18 信息 SparkSqlParser:解析命令:spark_schema.measures_20160520090502 线程 "main" org.apache.spark.sql.AnalysisException 中的异常:数据库 'spark_schema' 不存在; 在 org.apache.spark.sql.catalyst.catalog.ExternalCatalog.requireDbExists(ExternalCatalog.scala:37) 在 org.apache.spark.sql.catalyst.catalog.InMemoryCatalog.tableExists(InMemoryCatalog.scala:195) 在 org.apache.spark.sql.catalyst.catalog.SessionCatalog.tableExists(SessionCatalog.scala:360) 在 org.apache.spark.sql.DataFrameWriter.saveAsTable(DataFrameWriter.scala:464) 在 org.apache.spark.sql.DataFrameWriter.saveAsTable(DataFrameWriter.scala:458) 在 TreeClassifiersModels$.main(TreeClassifiersModels.scala:71) 在 TreeClassifiersModels.main(TreeClassifiersModels.scala) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:497) 在 org.apache.spark.deploy.SparkSubmit$.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:726) 在 org.apache.spark.deploy.SparkSubmit$.doRunMain$1(SparkSubmit.scala:183) 在 org.apache.spark.deploy.SparkSubmit$.submit(SparkSubmit.scala:208) 在 org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:122) 在 org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)

问题是因为 Spark 版本 2.0.0 发生了弃用。 Hive 上下文在 Spark 2.0.0 中已弃用。要 read/Write Spark 2.0.0 上的 Hive 表,我们需要按如下方式使用 Spark 会话。

val sparkSession = SparkSession.withHiveSupport(sc)