SparkSQL 数据清洗API

文章目录

    • 常见数据清洗API
      • dropDuplicates数据去重
      • dropna缺失值处理
      • fillna缺失值填充
    • Shuffle分区数目

常见数据清洗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中设置并行度的参数是相互独立的。

你可能感兴趣的:(Spark,大数据,spark,python)