数据处理技巧

使用 PySpark 进行数据清洗

Mike Metzger

Data Engineering Consultant

我们要解析什么?

  • 非规范数据
    • 空行
    • 注释行
    • 表头
  • 嵌套结构
    • 多种分隔符
  • 非规则数据
    • 各行列数不一
  • 以 CSV 为主
width, height, image

# This is a comment
200    300    affenpinscher;0
600    450    Collie;307    Collie;101
600    449    Japanese_spaniel;23
使用 PySpark 进行数据清洗

Stanford ImageNet 标注

  • 识别图像中的犬种
  • 给出图像中所有识别到的狗列表
  • 其他元数据(基础文件夹、图像尺寸等)

示例行:

02111277    n02111277_3206    500    375    Newfoundland,110,73,416,298
02108422    n02108422_4375    500    375    bull_mastiff,101,90,214,356 \
 bull_mastiff,282,74,416,370
使用 PySpark 进行数据清洗

移除空行、表头和注释

Spark 的 CSV 解析器:

  • 自动移除空行
  • 可用可选参数移除注释
df1 = spark.read.csv('datafile.csv.gz', comment='#')
  • 处理表头字段
    • 通过参数指定
    • 若定义了 schema 则忽略
df1 = spark.read.csv('datafile.csv.gz', header='True')
使用 PySpark 进行数据清洗

自动创建列

Spark 将:

  • 基于 sep 参数自动创建 DataFrame 列
    df1 = spark.read.csv('datafile.csv.gz', sep=',')
    
  • 默认使用 ,
  • 即使字符串中没有该分隔符也能成功解析
    df1 = spark.read.csv('datafile.csv.gz', sep='*')
    
  • 将数据存入默认列名 _c0
  • 便于正确处理嵌套分隔符
使用 PySpark 进行数据清洗

Passons à la pratique !

使用 PySpark 进行数据清洗

Preparing Video For Download...