常见数据清洗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环境下的运行,这种默认的设置,反而会在调度上带来额外的损耗,从而影响计算性能,所以我们可以在配置中修改这个参数值。一共有三种方法修改参数值。
-
- 配置文件中配置:conf/spark-defaults.conf文件中,修改/添加如下字段:
spark.sql.shuffle.partitions 100
。
-
- 在客户端提交参数中配置:
$SPARK_HOME/bin/spark-submit --conf "spark.sql.shuffle.partitions = 100"
。
-
- 在代码中设置(优先级最高):
ss = SparkSession.builder \
.appName("test") \
.master("local[*]") \
.config("spark.sql.shuffle.partitions", "10") \
.getOrCreate()
- 设置这个参数和Spark RDD中设置并行度的参数是相互独立的。