【问题标题】:INSERT SPARK DATAFRAME INTO HIVE Managed Acid Table not working, HDP 3.0将 SPARK 数据帧插入 HIVE 管理的酸表不工作,HDP 3.0
【发布时间】: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


    【解决方案1】:
    result.write.mode(SaveMode.Overwrite).saveAsTable("EXAMPLE_TABLE")
    

    您可以从here阅读更多详细信息

    【讨论】:

    • 我尝试了 result.write 但下面是错误:scala> result.write.mode(SaveMode.Overwrite).saveAsTable("EXAMPLE_DB"."EXAMPLE_TABLE") org.apache.spark.sql .catalyst.analysis.NoSuchDatabaseException:找不到数据库“dfa60358_wellington_fz_db”;在 org.apache.spark.sql.catalyst.catalog.SessionCatalog.org$apache$spark$sql$catalyst$catalog$SessionCatalog$$requireDbExists(SessionCatalog.scala:177) 示例表是使用 HIVE 目录创建的。无论如何要从 Spark DF 插入配置单元表吗?感谢回复
    • 我在下面尝试了这个方法:result.write.format("com.hortonworks.spark.sql.hive.llap.HiveWarehouseConnector").option("database", "EXAMPLE_DB").option( "table", "EXAMPLE_TABLE").mode("Append").save() 理由:由于数据帧“结果”在 Spark 目录中,我们无法插入 Hive 目录。我们需要使用 Hadoop 3.0 写操作 HiveWareHouseConnector。但问题是“结果”数据帧作为 DELTA 文件存储在 Hive 表 HDFS 位置“EXAMPLE_TABLE”中。而在 HDP 2.6 中,我们可以使用 Spark.SQL 对 HIVE 表进行 DF 插入,这将在表 HDFS 位置创建部分文件
    • @Venka 你是怎么解决这个问题的。我也遇到了同样的问题。
    • 您需要使用 HiveWarehouseConnector 来保存您的 Spark DF。 result.write.format("com.hortonworks.spark.sql.hive.llap.HiveWarehouseConnector").option("database", "EXAMPLE_DB").option("table", "EXAMPLE_TABLE").mode("Append" ).save()
    【解决方案2】:

    result.write.save("example_table.parquet")

    【讨论】:

      猜你喜欢
      • 2018-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-20
      • 1970-01-01
      • 2020-11-26
      • 1970-01-01
      • 2018-11-09
      相关资源
      最近更新 更多