如何使用“spark.catalog.createTable”函数创建分区表?
Posted
技术标签:
【中文标题】如何使用“spark.catalog.createTable”函数创建分区表?【英文标题】:How can I use "spark.catalog.createTable" function to create a partitioned table? 【发布时间】:2019-01-20 16:08:02 【问题描述】:https://spark.apache.org/docs/latest/api/scala/index.html#org.apache.spark.sql.catalog.Catalog
有一个选项参数,但我没有找到任何使用它来传递分区列的示例
【问题讨论】:
已检查 Spark 源。看起来在 Spark 2.4 和更早版本中仍然无法使用org.apache.spark.sql.catalog.Catalog
创建分区表。
谢谢@DmitryY。我还检查并发现只有选项参数......同时我用 spark.sql 切换到原始 SQL
我创建了SPARK-31001 来请求添加此功能。
【参考方案1】:
如果您不提供架构,我认为不需要指定分区列。在这种情况下,spark 会自动从该位置推断架构和分区。然而,目前的实现不可能同时提供模式和分区,但幸运的是,底层实现的所有代码都是开放的,因此我完成了创建外部 Hive 表的下一个方法。
private def createExternalTable(tableName: String, location: String,
schema: StructType, partitionCols: Seq[String], source: String): Unit =
val tableIdent = TableIdentifier(tableName)
val storage = DataSource.buildStorageFormatFromOptions(Map("path" -> location))
val tableDesc = CatalogTable(
identifier = tableIdent,
tableType = CatalogTableType.EXTERNAL,
storage = storage,
schema = schema,
partitionColumnNames = partitionCols,
provider = Some(source)
)
val plan = CreateTable(tableDesc, SaveMode.ErrorIfExists, None)
spark.sessionState.executePlan(plan).toRdd
【讨论】:
以上是关于如何使用“spark.catalog.createTable”函数创建分区表?的主要内容,如果未能解决你的问题,请参考以下文章
如何在自动布局中使用约束标识符以及如何使用标识符更改约束? [迅速]
如何使用 AngularJS 的 ng-model 创建一个数组以及如何使用 jquery 提交?