PySpark读取GCS中CSV文件时列值偏移问题排查
CSV列值偏移2列的常见原因
问题描述
将GCS存储的CSV文件以文本形式加载后按逗号拆分,出现部分列值偏移2列的情况(例如示例中行内列43的值本应处于列41的位置)。
原始示例行数据
202100000264277,01212022,*******2752,00000411042,15314.15,27021421334,D,00000000396,JONES HEALTHCARE GROUP,08036296542,8036296542,,02560,15314.15,425.89,0.00,0.00,110,10522,AMEX CA B2B/WHOLESALE 1 CNP,AEXP,372754*****1007,,01212022,01212022,127647,,,A,001383636306309,27021421359,ACH,CAD,,,,02153222888,90662316,62496,62504,,0000000000027021421359X,0089250008036296542157,45280,USA,01,1,,,Y,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
读取后的DataFrame数据
0 1 2 3 4 5 6 0 202100000264277 1212022 *******2752 411042 15314.15 27021421334 D 7 8 9 10 11 12 13 0 396 JONES HEALTHCARE GROUP 8036296542 8036296542 NaN 2560 15314.15 14 15 16 17 18 19 20 0 425.89 0.0 0.0 110 10522 AMEX CA B2B/WHOLESALE 1 CNP AEXP 21 22 23 24 25 26 27 28 29 0 372754*****1007 NaN 1212022 1212022 127647 NaN NaN A 1383636306309 30 31 32 33 34 35 36 37 38 39 40 0 27021421359 ACH CAD NaN NaN NaN 2153222888 90662316 62496 62504 NaN 41 42 43 44 45 46 47 0 0000000000027021421359X 0089250008036296542157 45280 USA 1 1 NaN
可能的原因分析
- 字段内容包含未转义的逗号:如果CSV中存在带逗号的字段(比如地址、公司全称等)但未用双引号包裹,按逗号拆分时会将该字段拆成多个列,若有两处此类未转义逗号,就会造成2列的偏移。
- 字段内部存在换行符:部分字段包含换行符但未用双引号包裹,导致读取时将同一行数据拆分成多行,后续行的列数与表头不匹配,引发列对齐错误。
- 前序行的列数异常:CSV文件中某几行的列数比正常行多2列,合并为DataFrame时自动对齐列,导致正常行的列值出现偏移。
- 读取参数设置错误:使用
read_csv等工具时,若未正确设置参数(比如空值解析规则、空白行处理逻辑),可能导致列数计算错误,引发偏移。 - 文件编码或不可见字符干扰:文件存在编码问题,包含不可见的控制字符,这些字符被误判为分隔符或干扰拆分逻辑,最终造成列偏移。
内容的提问来源于stack exchange,提问作者Jenny
相关产品推荐
相关产品推荐

