代码逻辑非常简单,可以从csv
加载数据并将其写入hive
,以前在default
模式中创建了配置单元表
CREATE TABLE datatable_01 (id INT, name STRING, ssn BIGINT, hours INT)
下面的代码段
val csvDataPath = "user/me/csvData"
val spark = SparkSession.builder().config("spark.master", "local").getOrCreate()
var csvDF = spark.read.option("header","true").option("inferSchema", "true").csv(csvDataPath + "/result.csv").dropDuplicates()
csvDF.write.mode("overwrite").format("orc").option("header", "false").insertInto("default.datatable_01")
以上代码在spark-shell
上正常工作
Spark version 2.3.0
Scala version 2.11.8
通过spark-submit
<properties>
<spark.version>2.3.0</spark.version>
</properties>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_2.11</artifactId>
<version>${spark.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-sql_2.11</artifactId>
<version>${spark.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-mllib_2.11</artifactId>
<version>${spark.version}</version>
<scope>provided</scope>
</dependency>
....
<plugin>
<groupId>org.scala-tools</groupId>
<artifactId>maven-scala-plugin</artifactId>
<version>2.11</version>
<executions>
<execution>
<goals>
<goal>compile</goal>
<goal>testCompile</goal>
</goals>
</execution>
</executions>
<configuration>
<sourceDir>src/main/scala</sourceDir>
<jvmArgs>
<jvmArg>-Xms64m</jvmArg>
<jvmArg>-Xmx1024m</jvmArg>
</jvmArgs>
</configuration>
</plugin>
这是错误的消息
19/08/27 08:50:49 ERROR QueryExecutionEventHandler: Action 'insertInto' execution failed
org.apache.spark.sql.AnalysisException: Table or view not found: default.datatable_01;
我看到一些线程在谈论由使用不同版本的Scala来构建应用程序引起的类似问题,但我认为情况并非如此。但是,经过数小时的研究,我仍然找不到问题的原因。
答案 0 :(得分:1)
在使用.enableHiveSupport()
构建Spark会话时尝试启用Hive支持
如果这不起作用,也将配置传递到spark-submit,以使用目录实现hive
,而不是默认的in-memory
。
您可以使用spark.catalog
进行调试,以查看火花读取的目录。
希望这会有所帮助!
答案 1 :(得分:1)
从Pom和代码中,可以想到两个原因
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-hive_2.11</artifactId>
<version>${spark.version}</version>
</dependency>
.enableHiveSupport()
丢失了val spark = SparkSession.builder().appName("My_App").enableHiveSupport().getOrCreate();
让我知道是否无效。