如果尚未设置,请在 Spark 配置中设置 Hive 元存储 uri。这可以在 Qubole 集群设置中完成。
使用一些属性设置 SparkSession
val spark: SparkSession =
SparkSession
.builder()
.enableHiveSupport()
.config("hive.exec.dynamic.partition", "true")
.config("hive.exec.dynamic.partition.mode", "nonstrict")
.getOrCreate()
假设 AWS,使用 spark.sql 在 S3 上定义一个外部表
CREATE EXTERNAL TABLE foo (...) PARTITIONED BY (...) LOCATION 's3a://bucket/path'
根据该表架构生成您的数据框。
为数据框注册一个临时表。我们就叫它tempTable
对您的分区运行插入命令,再次使用spark.sql
INSERT OVERWRITE TABLE foo PARTITION(part1, part2)
SELECT x, y, z, part1, part2 from tempTable
分区必须排在最后
分区位置将放置在 S3 中的表位置内。
如果您想使用外部分区,请查看 ALTER TABLE [PARTITION (spec)] 上接受 LOCATION 路径的 Hive 文档