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

Scala RDD读取TSV文件调用toInt抛出NumberFormatException求助

问题根因

Scala 提供的String.toInt方法仅支持转换标准整数格式的字符串,输入字符串不能包含小数点、非数字字符。你的数据集第一列为浮点型评分值(如样例中的1.6339、报错信息中的0.5312),不符合toInt的输入格式要求,因此会抛出NumberFormatException异常。

解决方案

你可以根据业务需求选择以下任意一种方案解决问题:

  • 先转浮点类型再转整数
    如果业务要求必须输出整数类型的评分,可先将字符串转为Double类型,再转为整数:
    1. 截断小数位取整:
    val ratesRDD = moviesRDD.map(r => (r(2), r(0).toDouble.toInt))
    
    1. 四舍五入取整:
    val ratesRDD = moviesRDD.map(r => (r(2), math.round(r(0).toDouble).toInt))
    
  • 增加脏数据校验过滤
    为避免存在空值、非数字格式的异常数据打断任务运行,可增加安全转换逻辑过滤非法数据:
    import scala.util.Try
    val ratesRDD = moviesRDD.map(r => (r(2), Try(r(0).toDouble.toInt).toOption))
      .filter(_._2.isDefined)
      .map(r => (r._1, r._2.get))
    
  • 保留原始浮点类型
    如果业务不需要对评分取整,可直接保留Double类型使用,无需转Int:
    val ratesRDD = moviesRDD.map(r => (r(2), r(0).toDouble))
    
    后续的reduceByKey(math.max(_, _))逻辑无需修改,math.max原生支持Double类型的数值比较。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 17:06:05