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

Spark查询DataFrame时ProposedAction与SimpleMatchRate列值错位原因

问题根因

两列值错位互换由Spark CSV读取默认规则与预期不一致导致:
读取CSV/TSV文件时,若同时配置header="true"和自定义StructType schema,Spark默认开启enforceSchema=true规则:该模式下仅会跳过文件第一行表头内容,不会根据表头文本与schema字段名做匹配,而是严格按照schema定义的字段顺序,与文件内列的物理位置从左到右一一对应赋值。

当前自定义schema的字段顺序为:

  1. Matched
  2. MatchRate
  3. ProposedAction
  4. SimpleMatchRate
  5. Status
    但实际读取的源TSV文件中,第三列存储的是数值类SimpleMatchRate内容,第四列存储的是is_new/is_linked/is_dupe这类ProposedAction枚举值,两列物理顺序与schema定义顺序刚好颠倒,因此出现值完全错位的现象。

另外代码片段存在一处隐藏错误:使用glob.glob遍历文件但未提前导入glob模块,直接运行会触发NameError,需补充对应导入语句。

修复方案

两种方案任选其一即可:

  • 方案1:调整自定义schema的字段顺序,互换ProposedAction和SimpleMatchRate的定义位置,与源文件列物理顺序保持一致。
  • 方案2:读取文件时新增enforceSchema=False参数,此时Spark会自动根据源文件表头名与传入的schema字段名做匹配,无需严格对齐schema顺序与文件列顺序,同时会自动校验字段类型。修改后的读取代码如下:
# 补充缺失的glob导入
import glob

df = spark.read.csv(
    files,
    sep="\t",
    header="true",
    encoding="UTF-8",
    schema=customschema,
    enforceSchema=False
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 05:45:42