明示的なパスを使わないでテーブルを保存しようとすると、ハイブストアは "/ hive/warehouse"の代わりに "/ user/hive/warehouse"を指す偽の "path"プロパティを持ちます。私がを明示的ににしたい場合、.option( "path"、 "/ hive/warehouse")を使用してパスを設定すると、すべて動作しますが、Hiveは外部テーブルを作成します。管理対象テーブルをハイブメタストアに保存し、ハイブ内のファイルの場所と一致しないその偽のパスプロパティを持たない方法はありますか?HiveにsaveAsTableを設定する方法(HiveテーブルがMANAGED_TABLEになるように)
from pyspark.sql import SparkSession
spark = SparkSession.builder.master(master_url).enableHiveSupport().getOrCreate()
df = spark.range(100)
df.write.saveAsTable("test1")
df.write.option("path", "/hive/warehouse").saveAsTable("test2")
hive> describe formatted test1;
OK
# col_name data_type comment
id bigint
# Detailed Table Information
Database: default
Owner: root
CreateTime: Fri Mar 10 18:53:07 UTC 2017
LastAccessTime: UNKNOWN
Protect Mode: None
Retention: 0
Location: file:/hive/warehouse/test1
Table Type: MANAGED_TABLE
Table Parameters:
spark.sql.sources.provider parquet
spark.sql.sources.schema.numParts 1
spark.sql.sources.schema.part.0 {\"type\":\"struct\",\"fields\":[{\"name\":\"id\",\"type\":\"long\",\"nullable\":true,\"metadata\":{}}]}
transient_lastDdlTime 1489171987
# Storage Information
SerDe Library: org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe
InputFormat: org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat
OutputFormat: org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat
Compressed: No
Num Buckets: -1
Bucket Columns: []
Sort Columns: []
Storage Desc Params:
path file:/user/hive/warehouse/test1
serialization.format 1
Time taken: 0.423 seconds, Fetched: 30 row(s)
hive> describe formatted test2;
OK
# col_name data_type comment
id bigint
# Detailed Table Information
Database: default
Owner: root
CreateTime: Fri Mar 10 16:02:07 UTC 2017
LastAccessTime: UNKNOWN
Protect Mode: None
Retention: 0
Location: file:/hive/warehouse/test2
Table Type: EXTERNAL_TABLE
Table Parameters:
COLUMN_STATS_ACCURATE false
EXTERNAL TRUE
numFiles 2
numRows -1
rawDataSize -1
spark.sql.sources.provider parquet
spark.sql.sources.schema.numParts 1
spark.sql.sources.schema.part.0 {\"type\":\"struct\",\"fields\":[{\"name\":\"id\",\"type\":\"long\",\"nullable\":true,\"metadata\":{}}]}
totalSize 4755
transient_lastDdlTime 1489161727
# Storage Information
SerDe Library: org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe
InputFormat: org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat
OutputFormat: org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat
Compressed: No
Num Buckets: -1
Bucket Columns: []
Sort Columns: []
Storage Desc Params:
path file:/hive/warehouse/test2
serialization.format 1
Time taken: 0.402 seconds, Fetched: 36 row(s)
(ハイブメタストアノードとすべてのスパークノードの両方で)hive-site.xmlでそのプロパティを設定し、そのプロパティを/ hive/warehouseに設定しました。上記のdescribeテーブルのコマンドを見ると、hiveは 'path'プロパティではなく 'location'プロパティでこのパスを尊重します。私は、場所とパスのプロパティの違いは何か分かりません。 – gnicholas