https://spark.apache.org/docs/latest/api/scala/index.html#org.apache.spark.sql.catalog.Catalog
有一个选项参数,但是我没有找到任何使用它传递分区列的示例
答案 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
}