2

我有一个简单的 Spark API java 程序,描述如下:

SparkSession spark = SparkSession
            .builder()
            .appName("spark")
            .master("local")
            .getOrCreate();

ArrayList<TagClass> tagClass = new ArrayList<>();
TagClass tagClass1 = new TagClass();
tagClass1.setId(13);
tagClass.add(tagClass1);
Dataset<Row> rowDataset = spark.createDataFrame(tagClass,TagClass.class);

rowDataset.createOrReplaceTempView("TestTable");

rowDataset.write().option("createTableColumnTypes", "id INTEGER")
    .format("jdbc")
        .option("url", "jdbc:hive2://192.***.***.1:10000")
        .option("dbtable", "TestTable")
        .save();

该程序尝试将一些数据插入到 apache spark thriftserver 表(hive)中。

当我在 IntelliJ 上运行它时,我得到以下信息:

Exception in thread "main" java.sql.SQLException: org.apache.spark.sql.catalyst.parser.ParseException:
no viable alternative at input 'CREATE TABLE TestTable ("id"'(line 1, pos 27) 
== SQL ==
CREATE TABLE TabelaTeste2 ("id" int )
---------------------------^^^

检查在我的 windows10 机器上运行的 thriftserver 实例(在 cmd 上作为超级用户(管理员))向我显示此错误:

ERROR SparkExecuteStatementOperation: Error executing query, currentState RUNNING,
org.apache.spark.sql.AnalysisException: Table or view not found: TestTable;

随后是 IntelliJ 上显示的相同错误。

直线连接得很好。在 Beeline 上,我可以在我尝试使用我的 java 代码操作的同一个 thriftserver 实例上选择、插入和创建表。

测试直线上的错误消息提供的 SQL 代码(CREATE TABLE TestTable ("id" int )),也会导致两者(IntelliJ 和 ThriftServer)显示相同的错误,但从 SQL (直线上的CREATE TABLE TestTable (id int) ) 工作得很好。

我不知道如何在 spark 生成的 SQL 上指定“无引号”行为,我也不认为这是问题所在,因为我假设这个 SQL 代码是由 .format("jdbc" ) 选项。

包起来:

-> 我正在尝试以编程方式在我的 spark thriftserver 上创建一个表,而不是使用 beeline 这样做,我得到了上述错误。

那么,为什么我会收到这个错误,我做错了什么?

我的POM如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"


     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>spark-cassandra</groupId>
<artifactId>Sparkssandra</artifactId>
<version>1.0-SNAPSHOT</version>
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
            </configuration>
        </plugin>
    </plugins>
</build>

<dependencies>
    <dependency>
        <groupId>org.apache.spark</groupId>
        <artifactId>spark-core_2.11</artifactId>
        <version>2.2.0</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/org.apache.spark/spark-sql -->
    <dependency>
        <groupId>org.apache.spark</groupId>
        <artifactId>spark-sql_2.11</artifactId>
        <version>2.2.0</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/org.apache.spark/spark-hive-thriftserver -->
    <dependency>
        <groupId>org.apache.spark</groupId>
        <artifactId>spark-hive-thriftserver_2.11</artifactId>
        <version>2.2.0</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.apache.hive/hive-jdbc -->
    <dependency>
        <groupId>org.apache.hive</groupId>
        <artifactId>hive-jdbc</artifactId>
        <version>2.2.0</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/com.datastax.spark/spark-cassandra-connector -->
    <dependency>
        <groupId>com.datastax.spark</groupId>
        <artifactId>spark-cassandra-connector_2.11</artifactId>
        <version>2.0.7</version>
    </dependency>

提前致谢!

编辑:

我已经从 JdbcUtils$ 类的 mettod createTable 生成的 SQL 表达式中删除了引号,并且该表已成功创建,但没有存储任何数据,而是 IntelliJ 上出现此错误消息:

ERROR Executor: Exception in task 0.0 in stage 0.0 (TID 0)
java.sql.SQLException: Method not supported

有什么线索吗?

4

0 回答 0