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

Spark读取CSV时误将末尾带D的字符串识别为Double类型的解决办法

解决Spark读取带后缀"D"的ID列被误识别问题

针对CSV文件中ID列(格式为8位数字+末尾"D")被Spark自动推断为Double类型并截断"D"的问题,除了关闭inferSchema外,还有以下两种可行方案:

1. 手动指定Schema读取

直接定义包含ID列为字符串类型的自定义Schema,Spark会严格按照指定类型解析数据,忽略自动推断逻辑。示例代码(Scala):

import org.apache.spark.sql.types.{StringType, StructField, StructType}

// 定义匹配CSV结构的Schema
val customSchema = StructType(Array(
  StructField("ACADEMIC_YEAR_SEM", StringType, nullable = true),
  StructField("ID", StringType, nullable = true)
))

// 应用Schema读取文件
val df = spark.read
  .option("header", "true")
  .schema(customSchema)
  .csv("path/to/your/target.csv")

读取后ID列会完整保留12345678D这类原始值,不会被截断或转换类型。

2. 按文本行读取后手动解析

将文件作为纯文本读取,自行分割每行内容并提取字段,完全绕过Spark的自动类型推断机制:

val df = spark.read.text("path/to/your/target.csv")
  .filter(!$"value".startsWith("ACADEMIC_YEAR_SEM")) // 过滤表头行
  .select(
    split($"value", ",")(0).alias("ACADEMIC_YEAR_SEM"),
    split($"value", ",")(1).alias("ID")
  )

这种方式适合需要自定义解析逻辑的场景,能确保ID列的原始格式不被修改。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 04:26:55