仅来自spark-submit的“找不到表或视图”错误,而不是spark-shell

时间:2019-08-28 17:49:07

标签: scala apache-spark

代码逻辑非常简单,可以从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

部署为Scala应用程序时不多
<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来构建应用程序引起的类似问题,但我认为情况并非如此。但是,经过数小时的研究,我仍然找不到问题的原因。

2 个答案:

答案 0 :(得分:1)

在使用.enableHiveSupport()构建Spark会话时尝试启用Hive支持

如果这不起作用,也将配置传递到spark-submit,以使用目录实现hive,而不是默认的in-memory

您可以使用spark.catalog进行调试,以查看火花读取的目录。

希望这会有所帮助!

答案 1 :(得分:1)

从Pom和代码中,可以想到两个原因

    pom中缺少
  1. spark-hive库。
<dependency>
        <groupId>org.apache.spark</groupId>
        <artifactId>spark-hive_2.11</artifactId>
        <version>${spark.version}</version>
</dependency>
  1. 如@Vihit Shah所建议的,.enableHiveSupport()丢失了
val spark = SparkSession.builder().appName("My_App").enableHiveSupport().getOrCreate();

让我知道是否无效。