#apache-spark #hive #apache-spark-sql #bucket
Вопрос:
Как уже упоминалось в названии, я пытаюсь сохранить таблицу с ячейками и сортировкой в Spark с указанным путем.
base.write.option("path","/database/hdfs/test")
.bucketBy(16, "key").sortBy("value").mode("overwrite").format("parquet")
.saveAsTable("db.bucketing")
Но я заметил, что «МЕСТОПОЛОЖЕНИЕ» таблицы-улья установлено в путь к хранилищу по умолчанию с временной папкой с именем <db_location>-<db_location><имя_таблицы> — _<имя_таблицы>ЗАПОЛНИТЕЛЬ_, но не путь, который я определил.
Я получил это, когда показывал ТАБЛИЦУ СОЗДАНИЯ в УЛЬЕ :
----------------------------------------------------
| CREATE EXTERNAL TABLE `db.bucketing`( |
| `col` array<string> COMMENT 'from deserializer') |
| ROW FORMAT SERDE |
| 'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe' |
| WITH SERDEPROPERTIES ( |
| 'path'='hdfs://database/hdfs/test') |
| STORED AS INPUTFORMAT |
| 'org.apache.hadoop.mapred.SequenceFileInputFormat' |
| OUTPUTFORMAT |
| 'org.apache.hadoop.hive.ql.io.HiveSequenceFileOutputFormat' |
| LOCATION |
| 'hdfs://database/hdfs/warehouse/tablespace/external/hive/db.db/bucketing-__PLACEHOLDER__' |
| TBLPROPERTIES ( |
| 'OBJCAPABILITIES'='SPARKSQL', |
| 'bucketing_version'='2', |
| 'spark.sql.create.version'='2.3.2.3.1.5.0-152', |
| 'spark.sql.sources.provider'='parquet', |
| 'spark.sql.sources.schema.bucketCol.0'='key', |
| 'spark.sql.sources.schema.numBucketCols'='1', |
| 'spark.sql.sources.schema.numBuckets'='16', |
| 'spark.sql.sources.schema.numParts'='1', |
| 'spark.sql.sources.schema.numSortCols'='1', |
| 'spark.sql.sources.schema.part.0'='{"type":"struct","fields":[{"name":"key","type":"long","nullable":true,"metadata":{}},{"name":"value","type":"double","nullable":true,"metadata":{}}]}', |
| 'spark.sql.sources.schema.sortCol.0'='value', |
| 'transient_lastDdlTime'='1637545413') |
----------------------------------------------------
Кто-нибудь может сказать мне, почему я получил «МЕСТОПОЛОЖЕНИЕ», отличное от «пути»? и как я мог это исправить ?
Спасибо