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

Apache Beam读取CSV日期列报NumberFormatException异常问题

异常原因
  • 你的Avro Schema中date字段的基础类型定义为int,配合logicalType: date,要求该字段的值必须是1970-01-01到当前日期的天数整数,但CSV文件中的date列是dd/MM/yyyy格式的字符串,代码默认尝试直接把字符串转成int,就触发了数字格式异常。
  • 你当前使用的CSV转Row的FileReader组件没有配置日期解析规则,无法自动把字符串格式的日期转换为Schema要求的整数格式的日期值。
解决方法

方案一:修改Schema+新增日期转换逻辑

  1. 先修改Avro Schema的date字段基础类型为string,先保证CSV读取阶段不会直接报错:
{
  "name" : "date",
  "type" : [ "string", "null" ]
}
  1. 读取到Row之后新增格式转换步骤,把字符串日期转成符合Avro date要求的整数:
DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("dd/MM/yyyy");
PCollection<Row> validRows = rows.apply("日期格式转换", MapElements.into(TypeDescriptor.of(Row.class))
  .via(row -> {
    String dateStr = row.getString("date");
    LocalDate localDate = LocalDate.parse(dateStr, dateFormatter);
    int epochDay = (int) localDate.toEpochDay();
    // 按照你需要的最终Schema构建新Row即可
    return Row.withSchema(finalSchema)
      .addValue(row.getString("ID"))
      .addValue(epochDay)
      .addValue(row.getDouble("balance"))
      .build();
  }));

方案二:配置CSV读取组件的日期规则

如果你使用的FileReader组件支持配置日期格式,可以直接在初始化组件时指定日期格式为dd/MM/yyyy,组件会自动把字符串日期转换为Schema要求的纪元天数整数,不需要额外写转换逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 17:45:10