在SparkR中展示数据时为何出现NumberFormatException?
问题根源与解决方法
这个错误的核心原因很明确:你的utc_offset字段虽然Schema显示是string类型,但实际数据中存在像"100.0"这种带小数点的字符串,而SparkR在执行showDF()或head()时,内部会根据字段的语义(utc_offset通常是整数型的时区偏移值)尝试隐式将字符串转换为整数类型,这就触发了数字格式异常。
下面是具体的解决步骤:
显式转换字段类型:在SQL查询里直接把
utc_offset转换成合适的数值类型,避免后续隐式转换出错。如果数据里确实有小数偏移值,转成DOUBLE类型:df1 <- SparkR::sql("SELECT created_at, CAST(user.utc_offset AS DOUBLE) as utc_offset FROM tweets0 WHERE racist = true ")要是确认所有小数部分都是0(比如
100.0实际等价于100),可以直接转成INTEGER类型:df1 <- SparkR::sql("SELECT created_at, CAST(user.utc_offset AS INTEGER) as utc_offset FROM tweets0 WHERE racist = true ")容错处理异常值:如果数据里还存在其他无法转换成数值的无效字符串,用
TRY_CAST替代CAST,转换失败的记录会返回NULL,不会直接抛出错误:df1 <- SparkR::sql("SELECT created_at, TRY_CAST(user.utc_offset AS INTEGER) as utc_offset FROM tweets0 WHERE racist = true ")先排查异常数据:你可以先查询一下
utc_offset的所有不同值,看看还有哪些异常格式的数据:SparkR::sql("SELECT DISTINCT user.utc_offset FROM tweets0 WHERE racist = true ") %>% showDF()
简单来说,就是SparkR的展示方法对utc_offset这个字段有默认的类型预期,而你的数据格式和这个预期不匹配,通过显式类型转换就能解决问题。
内容的提问来源于stack exchange,提问作者schoon
相关产品推荐
相关产品推荐

