You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Spark RDD Row对象中将空字符串替换为0?

解决RDD Row中空字符串转0的问题

要把RDD Row里的空字符串(比如那些延迟类字段的空值)转换成0,你可以写一个轻量的辅助函数处理转换逻辑,再在构造Row对象时对目标字段应用这个函数。下面是具体实现方案:

1. 定义空值转换函数

先写一个通用函数,判断字段是否为空字符串,是空则返回0,否则转为整数(因为这些字段都是数值类型):

def convert_empty_to_zero(value):
    # 先去除两端空白,避免空格导致的误判
    return 0 if value.strip() == "" else int(value)

2. 修改Row构造逻辑

在你原有的代码基础上,对所有可能为空的数值型字段(比如DEPARTURE_DELAY、AIR_SYSTEM_DELAY等)应用上面的转换函数,字符串类型字段(如AIRLINE、CANCELLATION_REASON)保持原有处理逻辑即可。

修改后的完整代码如下:

from pyspark.sql import Row

def convert_empty_to_zero(value):
    return 0 if value.strip() == "" else int(value)

def import_parse_rdd(data):
    # 读取文件创建RDD
    rdd = sc.textFile(data)
    # 移除表头
    header = rdd.first()
    rdd = rdd.filter(lambda row: row != header)
    # 按逗号分割每行数据
    split_rdd = rdd.map(lambda line: line.split(','))
    # 映射为Row对象并处理空值
    row_rdd = split_rdd.map(lambda line: Row(
        YEAR = int(line[0]),MONTH = int(line[1]),DAY = int(line[2]),DAY_OF_WEEK = int(line[3]),
        AIRLINE = line[4],FLIGHT_NUMBER = int(line[5]),
        TAIL_NUMBER = line[6],ORIGIN_AIRPORT = line[7],DESTINATION_AIRPORT = line[8],
        SCHEDULED_DEPARTURE = line[9],DEPARTURE_TIME = line[10],
        DEPARTURE_DELAY = convert_empty_to_zero(line[11]),
        TAXI_OUT = convert_empty_to_zero(line[12]),
        WHEELS_OFF = line[13],SCHEDULED_TIME = convert_empty_to_zero(line[14]),
        ELAPSED_TIME = convert_empty_to_zero(line[15]),
        AIR_TIME = convert_empty_to_zero(line[16]),
        DISTANCE = convert_empty_to_zero(line[17]),
        WHEELS_ON = line[18],TAXI_IN = convert_empty_to_zero(line[19]),
        SCHEDULED_ARRIVAL = line[20],ARRIVAL_TIME = line[21],
        ARRIVAL_DELAY = convert_empty_to_zero(line[22]),
        DIVERTED = convert_empty_to_zero(line[23]),
        CANCELLED = convert_empty_to_zero(line[24]),
        CANCELLATION_REASON = line[25],
        AIR_SYSTEM_DELAY = convert_empty_to_zero(line[26]),
        SECURITY_DELAY = convert_empty_to_zero(line[27]),
        AIRLINE_DELAY = convert_empty_to_zero(line[28]),
        LATE_AIRCRAFT_DELAY = convert_empty_to_zero(line[29]),
        WEATHER_DELAY = convert_empty_to_zero(line[30])
    ))
    return row_rdd

额外说明

  • 所有原本为空的数值字段都会被转换成0,比如你示例数据里的AIR_SYSTEM_DELAY等字段,处理后就会从空字符串变为0。
  • 如果你的数据里不存在带空格的空值(比如" "),可以去掉strip()直接判断value == "",简化函数逻辑。
  • 字符串类型字段保持原样,因为这类字段的空值不需要转为数字。

内容的提问来源于stack exchange,提问作者jixubi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 10:02:34