【发布时间】:2020-03-31 00:39:16
【问题描述】:
我在将 Spark 数据框插入 hive 表时遇到问题。谁能帮帮我。 HDP 3.1 版,Spark 2.3 版 提前致谢。
//原码部分
import org.apache.spark.SparkContext;
import com.hortonworks.spark.sql.hive.llap.HiveWarehouseSessionImpl;
import org.apache.spark.sql.DataFrame
import com.hortonworks.hwc.HiveWarehouseSession;
import org.apache.spark.sql.SparkSession$;
val spark = SparkSession.builder.getOrCreate()
spark.sparkContext.setLogLevel("ERROR")
**val hive = com.hortonworks.spark.sql.hive.llap.HiveWarehouseBuilder.session(spark).build()**
/*
Some Transformation operations happend and the output of transformation is stored in VAL RESULT
/*
val result = {
num_records
.union(df.transform(profile(heatmap_cols2type)))
}
result.createOrReplaceTempView("out_temp"); //Create tempview
scala> result.show()
+-----+--------------------+-----------+------------------+------------+-------------------+
| type| column| field| value| order| date|
+-----+--------------------+-----------+------------------+------------+-------------------+
|TOTAL| all|num_records| 737| 0|2019-12-05 18:10:12|
| NUM|available_points_...| present| 737| 0|2019-12-05 18:10:12|
hive.setDatabase("EXAMPLE_DB")
hive.createTable("EXAMPLE_TABLE").ifNotExists().column("`type`", "String").column("`column`", "String").column("`field`", "String").column("`value`","String").column("`order`", "bigint").column("`date`", "TIMESTAMP").create()
hive.executeUpdate("INSERT INTO TABLE EXAMPLE_DB.EXAMPLE_TABLE SELECT * FROM out_temp");
-----ERROR of Orginal code----------------
Caused by: org.apache.hive.service.cli.HiveSQLException: Error while compiling statement: FAILED: SemanticException [Error 10001]: Line 1:86 Table not found 'out_temp'**strong text**
我尝试的替代方法是:(由于 Hive 和 Spark 使用独立的目录,通过检查来自 HWC 写入操作的文档)
spark.sql("SELECT type, column, field, value, order, date FROM out_temp").write.format("HiveWarehouseSession.HIVE_WAREHOUSE_CONNECTOR").option("table", "wellington_profile").save()
-------替代步骤错误---- java.lang.ClassNotFoundException:找不到数据源:HiveWarehouseSession.HIVE_WAREHOUSE_CONNECTOR。请在http://spark.apache.org/third-party-projects.html 找到包裹 在 org.apache.spark.sql.execution.datasources.DataSource$.lookupDataSource(DataSource.scala:639) 在 org.apache.spark.sql.DataFrameWriter.save(DataFrameWriter.scala:241) ... 58 省略 引起:java.lang.ClassNotFoundException: HiveWarehouseSession.HIVE_WAREHOUSE_CONNECTOR.DefaultSource
我的问题是:
除了将 out_temp 保存为 Spark 中的 tempview 之外,还有什么方法可以直接在 hive 中创建表? 有没有办法从 spark 数据框插入 Hive 表?
感谢大家的宝贵时间!
【问题讨论】:
标签: scala apache-spark hive