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

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

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

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

vlurs2pr1#

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

Header1┐Header2┐Header3┐Header4┐Header5┐Header6┐Header7┐Header8┐Header9┐Header10
FUNDACAO ESTATAL SAUDE DA FAMILIA FESF┐VIP┐BR┐Creative Cloud All Apps┐PAID┐SMB┐1┐1┐2┐2022-07-29

当我运行这条线时:

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

Dataframe 正确加载:

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

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

Header1┐Header2┐Header3┐Header4┐Header5┐Header6┐Header7┐Header8┐Header9┐Header10
"FUNDACAO ESTATAL SAUDE DA FAMILIA FESF┐VIP┐BR┐Creative Cloud All Apps┐PAID┐SMB┐1┐1┐2┐2022-07-29"

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

+--------------------+-------+-------+-------+-------+-------+-------+-------+-------+--------+
|             Header1|Header2|Header3|Header4|Header5|Header6|Header7|Header8|Header9|Header10|
+--------------------+-------+-------+-------+-------+-------+-------+-------+-------+--------+
|FUNDACAO ESTATAL ...|   null|   null|   null|   null|   null|   null|   null|   null|    null|
+--------------------+-------+-------+-------+-------+-------+-------+-------+-------+--------+

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

相关问题