14-Sprak设置自动分区

说明

首先调整配置信息

spark.conf.set("spark.sql.sources.partitionOverwriteMode","dynamic")

在写入分区表的时候,一定要注意字段顺序,需要把分区字段放到最后,且如果有多个字段分区的话,顺序也要对应。

def re_arrange_partition_columns(df,partition_columns):
    '''
    df : 输入的df,spark.DataFrame类型
    partition_columns : list,分区字段,有顺序要求
    '''
    column_list = []
    for column in df.schema.name:
        if column not in partition_columns:
            column_list.append(column)
    column_list.extend(partition_columns)
    df = df.select(column_list)
    return df

示例

接下来演示动态分区数据的写入

建表

drop table if exists orders;
create table if not exists orders(
id int,
sku string,
qty int
)
using parquet
partitioned by (year int,month int) 

生成模拟数据

import pandas as pd
df = pd.DataFrame({
    'id':[1,2,3,4],
    'sku':['a','b','c','d'],
    'qty':[1,3,5,7],
    'year':[2020,2021,2022,2021],
    'month':[3,5,7,9]
})
spark.createDataFrame(df).createOrReplaceTempView('df_order')
df

在这里插入图片描述

设置动态分区&写入数据

spark.conf.set("spark.sql.sources.partitionOverwriteMode","dynamic")

sqlstr = '''
insert overwrite orders
select *
from df_order
'''
spark.sql(sqlstr)

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值