清洗相关的API
清洗相关的API:
1.去重API: dropDupilcates
2.删除缺失值API: dropna
3.替换缺失值API: fillna
去重API: dropDupilcates
dropDuplicates(subset):删除重复数据
1.用来删除重复数据,如果没有指定参数subset,比对行中所有字段内容,如果全部相同,则认为是重复数据,会被删除
2.如果有指定参数subset,只比对subset中指定的字段范围
删除缺失值API: dropna
dropna(thresh,subset):删除缺失值数据.
1.如果不传递参数,只要任意一个字段值为null,就会删除整行数据
2.如果只指定了subset,那么空值的检查,就只会限定在subset指定范围内
3.如果只指定了thresh,那么空值检查的这些字段中,至少需要有thresh(>=thresh)个字段的值不为空,才不会被删除
替换缺失值API: fillna
fillna(value,subset):替换缺失值数据
1.value:必须要传递参数,指定填充缺失值的数据
2.subset:限定缺失值的替换范围
注意:
value如果不是字典,那么就只会替换字段类型匹配的空值
最常用的是value传递字典形式
# 直接基于DataFrame来处理
# 导包
import os
from pyspark import SparkConf, SparkContext
from pyspark.sql import SparkSession
from pyspark.sql.types import StructType, IntegerType, StringType, StructField
import pyspark.sql.functions as F
# 绑定指定的python解释器
"""
基于RDD转换DataFrame的方式
需求分析:
1- 将每行内容切分得到单个的单词
2- 组织DataFrame的数据结构
2.1- 有两列。一列是单词,一列是次数
"""
os.environ['SPARK_HOME'] = '/export/server/spark'
os.environ['PYSPARK_PYTHON'] = '/root/anaconda3/bin/python3'
os.environ['PYSPARK_DRIVER_PYTHON'] = '/root/anaconda3/bin/python3'
# 创建main函数
if __name__ == '__main__':
print('API的清洗')
# 创建Sparksession对象
spark = SparkSession \
.builder \
.appName('api_etl_demo') \
.master('local[*]') \
.getOrCreate()
# 数据输入
init_df = spark.read.csv(
path='file:///export/data/pyspark_projects/02_spark_sql/data/clear_data.csv',
sep=',',
header=True,
inferSchema=True,
encoding='utf8'
)
# 查看数据
init_df.show()
init_df.printSchema()
# 数据处理
print('=' * 50)
# 去重API: dropDuplicates
init_df.dropDuplicates().show()
# 指定字段去重
init_df.dropDuplicates(subset=['id', 'name']).show()
print('=' * 50)
# 删除缺失值的API: dropna
init_df.dropna().show()
# 指定字段删除
init_df.dropna(subset='name').show()
init_df.dropna(subset=['name', 'age', 'address']).show()
init_df.dropna(thresh=1, subset=[&#