SparkSQL 数据清洗API

常见数据清洗API

  • 在我们进行数据处理的时候,往往很多数据都是杂乱无章的数据,所以我们在处理数据时需要对数据进行预处理操作(数据清洗)。

dropDuplicates数据去重

  • 功能:对DF的数据进行去重,如果重复的数据有多条,取第一条。
  • API:df.dropDuplicates()
  • 参数介绍:可以对指定列进行去重,如果指定列中有重复数据,就认定为重复数据。
	df.dropDuplicates(subset=['name', 'age']).show()

dropna缺失值处理

  • 功能:如果数据中包含null,通过dropna来进行判断,符合条件就删除这一行数据。
  • API:df.dropna()
  • 参数介绍:无参数使用, 只要列中有null 就删除这一行数据;也可以设置阈值,thresh = 3表示,最少满足3个有效列,不满足就删除当前行数据。同样也可以指定列。
	df.dropna(thresh=3).show()
	df.dropna(thresh=2, subset=['name', 'age']).show()

fillna缺失值填充

  • 功能:根据参数规则,对null值进行替换
  • API:df.fillna()
  • 参数介绍:全局替换,只要列中有null值就全部替换为当前设置的值,同样也可以指定列进行填充,也可以给定字典形式设定各个列的填充规则。
 	df.fillna("无业游民", subset=['job']).show()
    df.fillna({'age': 1, 'name': '无名氏', 'job': '无业游民'}).show()

Shuffle分区数目

  • 这里补充说明下shuffle的分区数目问题,在SparkSQL中,当job产生shuffle的时候,默认的分区数spark.sql.shuffle.partitions为200,在大型分布式群集中设置200,其实是很正常的一件事,但是如果是在小型的分布式,或是在一些local环境下的运行,这种默认的设置,反而会在调度上带来额外的损耗,从而影响计算性能,所以我们可以在配置中修改这个参数值。一共有三种方法修改参数值。
      1. 配置文件中配置:conf/spark-defaults.conf文件中,修改/添加如下字段:spark.sql.shuffle.partitions 100
      1. 在客户端提交参数中配置:$SPARK_HOME/bin/spark-submit --conf "spark.sql.shuffle.partitions = 100"
      1. 在代码中设置(优先级最高):
    ss = SparkSession.builder \
        .appName("test") \
        .master("local[*]") \
        .config("spark.sql.shuffle.partitions", "10") \
        .getOrCreate()
  • 设置这个参数和Spark RDD中设置并行度的参数是相互独立的。
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值