zoukankan      html  css  js  c++  java
  • pyspark学习笔记

    记录一些pyspark常用的用法,用到的就会加进来

    pyspark指定分区个数

    通过spark指定最终存储文件的个数,以解决例如小文件的问题,比hive方便,直观
    有两种方法,repartition,coalesce,并且,这两个方法针对RDD和DataFrame都有
    repartition和coalesce的区别:
    repartition(numPartitions:Int):RDD[T]
    coalesce(numPartitions:Int,shuffle:Boolean=false):RDD[T]
    他们两个都是RDD的分区进行重新划分,repartition只是coalesce接口中shuffle为true的简易实现,(假设RDD有N个分区,需要重新划分成M个分区)

    • N<M。一般情况下N个分区有数据分布不均匀的状况,利用HashPartitioner函数将数据重新分区为M个,这时需要将shuffle设置为true。
    • 如果N>M并且N和M相差不多,(假如N是1000,M是100)那么就可以将N个分区中的若干个分区合并成一个新的分区,最终合并为M个分区,这时可以将shuff设置为false,在shuffle为false的情况下,如果M>N时,coalesce为无效的,不进行shuffle过程,父RDD和子RDD之间是窄依赖关系。
    • 如果N>M并且两者相差悬殊,这时如果将shuffle设置为false,父子RDD是窄依赖关系,他们同处在一个stage中,就可能造成spark程序的并行度不够,从而影响性能,如果在M为1的时候,为了使coalesce之前的操作有更好的并行度,可以讲shuffle设置为true。
      具体用法:
       rdd.repartition(1)
       rdd.coalesce(1)
       df = spark.sql('select * from test')
       df.repartition(1)
       df.repartition(5,col("name")).coalesce(2)
    

    hive-sql与spark-sql中union all 的不同

    在hive-sql中,如果字段类型为map<string,string>,那么union all上下两个表中,如果有要表示空的map,必须使用map(null,null)这种方式,事实上,还是一个map对象
    但是在spark-sql中,如果有要表示空的map,就不能直接用map(null,null)了,应该直接赋值null,本质上,是一个null值,而不是map对象

  • 相关阅读:
    iOS开发-Scheduler attach ERROR when replacing an existing executor !!! id:88
    多层导航栏下的登陆注销架构
    iOS开发-功能篇-静态库
    iOS开发-UI篇-AutoLayout
    iOS开发-数据篇-sqlite存储
    零碎知识整理-外链应用
    零碎知识整理
    iOS开发-功能篇-国际化|NSUserDefaults
    iOS开发-底层篇-Class详解
    swift可选隐式可选类型
  • 原文地址:https://www.cnblogs.com/goldenSky/p/11214599.html
Copyright © 2011-2022 走看看