首页 > 解决方案 > 如何使用“spark.catalog.createTable”函数创建分区表?

问题描述

https://spark.apache.org/docs/latest/api/scala/index.html#org.apache.spark.sql.catalog.Catalog

有一个选项参数,但我没有找到任何使用它来传递分区列的示例

标签: apache-spark

解决方案


我相信如果您不提供架构,则不需要指定分区列。在这种情况下,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  
  }

推荐阅读