DataFrame详解

本文介绍了如何使用Python的pyspark库进行API数据清洗,包括去重、删除和替换缺失值,以及如何调整SparkSQL的Shuffle分区。还展示了如何处理DataFrame数据,进行切分、计数并输出到CSV、JSON和数据库中,同时处理中文字符编码问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

清洗相关的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=[&#
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值