PySpark中解析CSV文件和错误处理的问题

PySpark中解析CSV文件和错误处理的问题,pyspark,azure-databricks,Pyspark,Azure Databricks,我正在与Azure Databricks和PySpark 2.4.3合作,试图构建一种健壮的方法来将文件从Blob存储导入群集文件。事情基本上是可行的,但解析并没有像我预期的那样引发错误 我有一个7GB的csv文件,据我所知,该文件中有许多记录存在导致跳过行的问题(通过协调从数据帧写入的输出拼花文件中读取的记录数与源csv中读取的记录数来找到)。我正在尝试使用badRecordsPath选项,但没有生成任何输出(我可以找到)。任何人都可以分享关于如何在存在坏数据时排除文件加载故障的建议,以及如何

我正在与Azure Databricks和PySpark 2.4.3合作,试图构建一种健壮的方法来将文件从Blob存储导入群集文件。事情基本上是可行的,但解析并没有像我预期的那样引发错误

我有一个7GB的csv文件,据我所知,该文件中有许多记录存在导致跳过行的问题(通过协调从数据帧写入的输出拼花文件中读取的记录数与源csv中读取的记录数来找到)。我正在尝试使用badRecordsPath选项,但没有生成任何输出(我可以找到)。任何人都可以分享关于如何在存在坏数据时排除文件加载故障的建议,以及如何创建一个健壮的流程来处理将来不允许的解析错误

其中一个问题是关于嵌入的新行,我发现全文件和多行选项都有帮助,但我现在面临的挑战是如何洞察哪些记录不被接受

我用来加载文件的python代码如下所示

myDf = spark.read.format("csv")\
.option("inferSchema", "true")\
.option("header", "true")\
.option("wholeFile", "true")\
.option("multiline","true")\
.option("ignoreLeadingWhiteSpace", "true")\
.option("ignoreTrailingWhiteSpace", "true")\
.option("parserLib","univocity")\
.option('quote', '"')\
.option('escape', '"')\
.option("badRecordsPath","/tmp/badRecordsPath")\
.load(BLOB_FILE_LOCATION)
我看到的是,在1000多万条记录中,大约有50万条记录被丢弃。目前,我无法轻松判断哪些故障或知道发生了哪些故障或它们是什么(不导出和比较数据,这对于一次性加载来说是可以的,但对于生产系统来说是不可接受的)。我也尝试过其他的读取模式,但运气不好(它的行为似乎总是像设置了DROPMALFORMED,但事实并非如此(甚至在实验中尝试了模式设置“FAILFAST”)


非常感谢您提供的任何见解/建议。

我似乎有一个类似的用例。如果有帮助,请参阅下面的链接。我看到-包括一个步骤,使用select对有效数据执行添加的加载后筛选(可能使用,也可能不使用UDF)。我们必须探索加载的数据中的模式,以寻找机会更确切地了解基于数据的好行和坏行。一般来说,验证步骤应该是管道的一部分,好/坏数据移动到两个单独的dfs/文件。谢谢!现在有了答案。我们需要在不使用架构的情况下加载它,然后应用eck和验证,然后可以将坏记录和好记录拆分为两个单独的文件。这并不能完全解决您的问题,但似乎必须这样做。分享您对此的看法和想法。似乎,我有一个类似的用例。如果有帮助,请参阅下面的链接。我看到-包括使用se执行添加的加载后过滤的步骤选择有效数据(可能使用或不使用UDF)。我们必须探索加载的数据中的模式,以寻找机会更确切地了解基于数据的好行和坏行。一般来说,验证步骤应该是管道的一部分,好/坏数据移动到两个单独的dfs/文件。谢谢!现在有了答案。我们需要在不使用架构的情况下加载它,然后应用eck和验证,然后可以将坏记录和好记录拆分为两个单独的文件。这并不能完全解决您的问题,但看起来必须这样做。分享您对此的看法和想法。