PySpark大数据清洗常用代码集锦.docxVIP

  • 2
  • 0
  • 约2.8千字
  • 约 3页
  • 2025-07-02 发布于上海
  • 举报

PySpark大数据清洗常用代码集锦

一、数据读取与初步处理

(一)数据加载与格式解析

PySpark支持从多种数据源(如CSV、JSON、Parquet)加载数据。例如,读取CSV文件时,需指定分隔符和列名:

df=spark.read.csv(path/to/file.csv,header=True,sep=,)

对于嵌套结构的JSON文件,可使用option(multiLine,True)处理复杂格式。若数据包含非法字符(如特殊符号或换行符),需使用escape参数或正则表达式过滤。

(二)列名标准化与类型推断

数据列名常存在大小写不一致或空格问题,可通过withColumnRenamed统一命名规范:

df=df.withColumnRenamed(old_column,new_column)

自动类型推断可能导致错误(如日期被识别为字符串),需手动指定模式:

frompyspark.sql.typesimportStructType,StructField,StringType,IntegerType

schema=StructType([

StructField(date,StringType(),True),

StructField(value,IntegerType(),True)

])

df=spark.read.csv(data.csv,schema=schema)

二、缺失值处理

(一)缺失值检测与统计

使用isNull()和count()统计每列缺失值数量:

frompyspark.sql.functionsimportcol

missing_stats=df.select([col(c).isNull().alias(c)forcindf.columns]).groupBy().sum()

missing_stats.show()

若某列缺失率超过阈值(如30%),可考虑直接删除该列。

(二)缺失值填充策略

对数值型列,常用均值或中位数填充:

frompyspark.sql.functionsimportmean

mean_value=df.select(mean(col(numeric_column))).collect()[0][0]

df_filled=df.na.fill(mean_value,subset=[numeric_column])

对分类变量,可用众数或自定义值(如”Unknown”)填充。复杂场景下,可结合窗口函数按时间或分组填充。

三、重复数据处理

(一)全列重复记录删除

使用dropDuplicates()删除完全相同的行:

df_unique=df.dropDuplicates()

若数据量较大,可通过repartition调整分区提升性能。

(二)基于关键字段的去重

按特定列去重并保留最新记录(如根据时间戳排序):

frompyspark.sql.windowimportWindow

window=Window.partitionBy(key_column).orderBy(col(timestamp).desc())

df_deduplicated=df.withColumn(rank,rank().over(window)).filter(col(rank)==1).drop(rank)

此方法适用于存在逻辑主键但多版本数据并存的情况。

四、数据转换与格式化

(一)字符串处理与正则表达式

清洗特殊字符或格式化文本:

frompyspark.sql.functionsimportregexp_replace

df_clean=df.withColumn(text_column,regexp_replace(col(text_column),[^a-zA-Z0-9],))

提取特定模式(如电话号码)时,可使用regexp_extract:

frompyspark.sql.functionsimportregexp_extract

df=df.withColumn(phone,regexp_extract(col(contact_info),(\\d{3}-\\d{4}),0))

(二)日期与时间格式化

转换异构日期格式(如”yyyy-MM-dd”与”dd/MM/yyyy”混用):

frompyspark.sql.functionsimportto_date

df=df.withColumn(date_column,to_

文档评论(0)

1亿VIP精品文档

相关文档