Spark Java 将数据附加到 Hive 表

问题描述

我在尝试将数据附加到 hive 表时遇到了一些问题。 我正确地将会话声明为会话:我可以从表中检索数据

SparkSession spark = SparkSession
                .builder()
                .appName("Java Spark sql basic example")
                .config("hive.metastore.uris","thrift://localhost:9083")

                .enableHiveSupport()
                .master("local[*]")
                .getorCreate();

当我尝试使用 df.write().mode(SaveMode.Append).saveAsTable("sample.test_table"); 附加一些数据时

Exception in thread "main" java.lang.classNotFoundException: Failed to find data source: hive. Please find packages at http://spark.apache.org/third-party-projects.html

我缺少什么?

编辑: 使用 df.write().insertInto("prova2.test_table"); 有效,不知道它是如何工作的

解决方法

saveAsTable() 似乎无法如您所愿。试试这个,

注册临时表

df.registerTempTable("sample.temptable")

如果表尚未退出,则创建并插入数据,

sqlContext.sql("CREATE TABLE IF NOT EXISTS sample.test_table as select * from sample.temptable")

OR 简单地创建它而不插入任何值,以便您可以毫无例外地重新运行代码

sqlContext.sql("CREATE TABLE IF NOT EXISTS sample.test_table")

插入数据(表应该存在)

sqlContext.sql("insert into table sample.test_table select * from sample.temptable")

删除临时表

sqlContext.sql("DROP TABLE IF EXISTS sample.temptable")

阅读更多关于 temporary table usage

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...