【spark】七 DataFrame的repartition、partitionBy、coalesce区别

环境:spark 2…3.1 python 2.7

问题:发现spark DataFrame.write 无论format(“csv”).save(hdfsPath)中是csv、parquet、json,或者使用write.csv() write.json()保存之后都是一个目录,下面生成很多个文件,只有设置分区为一个时,才能在目录下只有一个.success文件和一个分区数据文件(即小文件数据文件个数与分区个数对应)

所以要弄明白几个分区的意思:

一 repartition(numPartitions, *cols) 重新分区(内存中,用于并行度),用于分区数变多,设置变小一般也只是action算子时才开始shuffing;而且当参数numPartitions小于当前分区个数时会保持当前分区个数等于失效。
	df.reparition(100,"month")
二 partitionBy(*cols) 根据指定列进行分区(主要磁盘存储,影响生成磁盘文件数量,后续再从存储中载入影响并行度),相似的在一个区,并没有参数来指定多少个分区,而且仅用于PairRdd
df.map(lambda x:(x[0],x[1],x[2])).toDF(["month","day","value"]).partitionBy(["month","day"])
三 coalesce(numPartitions) 联合分区,用于将分区变少。不能指定按某些列联合分区
df.coalesce(1).rdd.getNumPartitions()
  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值