apache-spark - 如何使用“spark.catalog.createTable”函数创建分区表?
问题描述
https://spark.apache.org/docs/latest/api/scala/index.html#org.apache.spark.sql.catalog.Catalog
有一个选项参数,但我没有找到任何使用它来传递分区列的示例
解决方案
我相信如果您不提供架构,则不需要指定分区列。在这种情况下,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
}
推荐阅读
- python - 如何在python中执行一种热编码
- python - python3中的动态命名列表
- python - 在 Windows 10 上未考虑 tkinter 按钮上的 activebackground 选项
- gradle - 将环境变量从 build.gradle 传递给自定义插件
- javascript - 使用 turbolink 以编程方式打开 Bootstrap 选项卡
- aws-glue - 将从 AWS Glue 目录创建 AWS Athena 表定义的实用程序,以便我可以添加 WITH SERDEPROPERTIES 部分
- python - TypeError:需要一个类似字节的对象,尝试写入文件时没有'str'
- c++ - 修改链表 C++ 中的记录
- php - Laravel 随机丢失 mysql 连接
- kubernetes-pod - Kubernetes 集群中的 pod 无法通过 egress networkpolicy 连接到 Internet