我有一个简单的 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
有什么线索吗?