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对象

  • 相关阅读:
    公用表表达式(CTE)的递归调用
    c# 如何让tooltip显示文字换行
    实战 SQL Server 2008 数据库误删除数据的恢复
    SQL SERVER数据库中 是否可以对视图进行修改删除
    asp.net中实现文件批量上传
    sql server 2008学习2 文件和文件组
    sql server 2008学习3 表组织和索引组织
    sql server 2008学习4 设计索引的建议
    sql server 2008学习10 存储过程
    .net 调用 sql server 自定义函数,并输出返回值
  • 原文地址:https://www.cnblogs.com/goldenSky/p/11214599.html
Copyright © 2011-2022 走看看