使用spark.catalog.createTable创建分区表的正确分区参数是什么
正确参数与写法
你需要使用partitionColumns作为参数名,值为分区列名组成的列表,同时需要显式指定数据源类型source,正确示例如下:
from pyspark.sql import functions as F df = spark.range(10).withColumn("foo", F.lit("bar")) spark.catalog.createTable( tableName="default.test_partition", schema=df.schema, source="parquet", # 可替换为你需要的数据源类型,如hive、orc等 partitionColumns=["id"] )
错误原因说明
你之前传入的partitionColumnNames、partitionBy等参数都属于透传给底层数据源的配置项,因此会被直接写入SERDEPROPERTIES中,不会被Catalog识别为表的分区配置。只有使用官方定义的partitionColumns参数传入列表类型的列名,Catalog才会自动将对应列从普通字段中移出,设置为分区列,最终生成你预期的DDL结构。
补充说明
- 该方法还支持更多建表配置:比如传入
bucketColumnNames指定分桶列、numBuckets指定分桶数量、comment指定表注释等,可以满足绝大多数建表需求。如果你使用的是Spark 2.x版本,该方法暂不支持直接指定分区配置,建议升级到3.x以上版本使用该能力。 - 用该方法创建的分区表和直接执行SQL DDL创建的表完全一致,后续调用
insertInto实现动态分区覆盖的逻辑不受任何影响。
内容的提问来源于stack exchange,提问作者Steven
相关产品推荐
相关产品推荐

