Pyspark阅读csv分隔符未针对某些数据进行解析

3ks5zfa0  于 2023-01-01  发布在  Spark
关注(0)|答案(1)|浏览(230)
  1. csv_df = spark.read.option("header", "true")
  2. .csv(path, sep = '┐')

一小部分数据无法正确解析,并且以"str┐str┐str┐str┐str┐str┐str┐str"出现在第一列中,其他列为空。这些行中的分隔符数量与正确解析的分隔符数量相同。我可以看出,未解析的行也没有其他特殊之处。您知道是什么原因导致了这种情况以及如何修复吗?
解析失败的示例:

  1. FUNDACAO ESTATAL SAUDE DA FAMILIA FESFVIPBRCreative Cloud All AppsPAIDSMB1122022-07-29
vlurs2pr

vlurs2pr1#

我通常不喜欢写不完整的答案,但我将介绍到目前为止我所采取的调试步骤,并提供一个可能的解决方案。
我创建了一个一行的.csv文件,以'┐'作为分隔符(还有一个标题行):

  1. Header1Header2Header3Header4Header5Header6Header7Header8Header9Header10
  2. FUNDACAO ESTATAL SAUDE DA FAMILIA FESFVIPBRCreative Cloud All AppsPAIDSMB1122022-07-29

当我运行这条线时:

  1. csv_df = spark.read.option("header", "true").csv(path, sep = '┐')

Dataframe 正确加载:

  1. +--------------------+-------+-------+--------------------+-------+-------+-------+-------+-------+----------+
  2. | Header1|Header2|Header3| Header4|Header5|Header6|Header7|Header8|Header9| Header10|
  3. +--------------------+-------+-------+--------------------+-------+-------+-------+-------+-------+----------+
  4. |FUNDACAO ESTATAL ...| VIP| BR|Creative Cloud Al...| PAID| SMB| 1| 1| 2|2022-07-29|
  5. +--------------------+-------+-------+--------------------+-------+-------+-------+-------+-------+----------+

但是,如果我在第一个非标题行周围加上引号,那么这将转义该行中的所有'┐'分隔符,因此它们不会被解析。

  1. Header1Header2Header3Header4Header5Header6Header7Header8Header9Header10
  2. "FUNDACAO ESTATAL SAUDE DA FAMILIA FESF┐VIP┐BR┐Creative Cloud All Apps┐PAID┐SMB┐1┐1┐2┐2022-07-29"

这将导致您在尝试加载csv文件时观察到的行为:

  1. +--------------------+-------+-------+-------+-------+-------+-------+-------+-------+--------+
  2. | Header1|Header2|Header3|Header4|Header5|Header6|Header7|Header8|Header9|Header10|
  3. +--------------------+-------+-------+-------+-------+-------+-------+-------+-------+--------+
  4. |FUNDACAO ESTATAL ...| null| null| null| null| null| null| null| null| null|
  5. +--------------------+-------+-------+-------+-------+-------+-------+-------+-------+--------+

因此,我认为您的csv文件很可能在您的行周围有引号,或者在您的csv文件中该行位置旁边有一个或多个字符导致了问题-问题可能出在csv文件本身,而不是pyspark csv解析器。

展开查看全部

相关问题