如何使用“ spark.catalog.createTable”函数创建分区表?

时间:2019-01-20 16:08:03

标签: apache-spark

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

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

1 个答案:

答案 0 :(得分: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  
  }