Я больше не могу сохранять таблицу в базу данных куста с помощью хранилища метаданных. Я вижу таблицы в искре с использованием spark.sql
, но я не вижу тех же таблиц в базе данных улья. Я пробовал это, но он не хранит таблицу в улье. Как я могу настроить хранилище метаданных улья? Версия Spark - 2.3.1.
Если вы хотите получить более подробную информацию, прокомментируйте.
%spark
import org.apache.spark.sql.SparkSession
val spark = (SparkSession
.builder
.appName("interfacing spark sql to hive metastore without configuration file")
.config("hive.metastore.uris", "thrift://xxxxxx.xxx:9083") // replace with your hivemetastore service's thrift url
.enableHiveSupport() // don't forget to enable hive support
.getOrCreate())
spark.conf.get("spark.sql.warehouse.dir")// Output: res2: String = /apps/spark/warehouse
spark.conf.get("hive.metastore.warehouse.dir")// NotSuchElement Exception
spark.conf.get("spark.hadoop.hive.metastore.uris")// NotSuchElement Exception
var df = (spark
.read
.format("parquet")
.load(dataPath)
df.createOrReplaceTempView("my_temp_table");
spark.sql("drop table if exists my_table");
spark.sql("create table my_table using hive as select * from my_temp_table");
spark.sql("show tables").show(false)// I see my_table in default database
Обновление после ответа @catpaws: HDP 3.0 и новее, Hive и Spark используют независимые каталоги
Сохранить таблицу в каталог Spark:
df.createOrReplaceTempView("my_temp_table");
spark.sql("create table my_table as select * from my_temp_table");
VS
Сохранить таблицу в каталог ульев:
val hive = com.hortonworks.spark.sql.hive.llap.HiveWarehouseBuilder.session(spark).build()
hive.createTable("newTable")
.ifNotExists()
.column("ws_sold_time_sk", "bigint")
...// x 200 columns
.column("ws_ship_date_sk", "bigint")
.create()
df.write.format(HIVE_WAREHOUSE_CONNECTOR)
.option("table", "newTable")
.save()
Как вы видите, Hive Warehouse Connector очень непрактичен для фреймов данных с сотней столбцов. Есть ли способ сохранить большие фреймы данных в Hive?