美文网首页
PySpark写数到 Hive 动态分区

PySpark写数到 Hive 动态分区

作者: 门朝大海 | 来源:发表于2019-07-31 19:24 被阅读0次

    首先,写入动态分区表,要设置一些严格模式的参数,将其设置为非严格模式

    .config("hive.exec.dynamic.partition.mode", "nonstrict")
    
    插入非分区 Hive 表
    df_tb = spark.sql("select a,b from source_table")
    df_tb.repartition(2).write.insertInto("table_name",overwrite=False)
    

    对于插入 Hive 表来说,这个重分区不是必须的,但是建议使用,这样可以控制插入的 Hive 表中的文件个数。

    动态插入分区表
    create table source(
    id string,
    pdt string,
    )
    partitioned by (day string) ;
    
    df_tb = spark.sql("select pdt, id, pdt from source")
    df_tb.repartition(2).write.insertInto("table_name",overwrite=False)
    

    是的,插入表的语法是一样的。只不过前面查询的时候,要把分区字段放在最后一个查询位置,这和 Hive 的动态分区插入是一样的。

    我一般使用 df 算子的方式插入表,而不使用在 sql 中写 insert into 的方式。 因为这种方式可以更好的控制生成的文件数。而使用 insert into 的方式,文件数会等于 shuffle 的分区数。 为了计算性能,shuffle 的分区数不会设置的太小,但是最终结果可能数量并不大,没必要生成这么多文件。所以我一般会使用算子的方式插入 Hive 表。

    相关文章

      网友评论

          本文标题:PySpark写数到 Hive 动态分区

          本文链接:https://www.haomeiwen.com/subject/hvxxdctx.html