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

时间:2019-09-12 20:47:25

标签: pyspark azure-databricks

我正在与Azure Databricks和PySpark 2.4.3一起尝试建立一种健壮的方法来将文件从Blob存储导入群集文件。事情主要是工作,但是解析并没有像我期望的那样引发错误。

我有一个7GB的csv文件,我知道它有许多记录,这些记录会导致导致跳过行的问题(通过协调从Dataframe与源CSV写入的输出镶木文件中的读取记录数来发现)。我正在尝试使用badRecordsPath选项,并且没有生成任何输出(我可以找到)。任何人都可以分享有关在数据损坏时如何解决文件加载问题的建议,以及如何创建一个健壮的流程来处理将来无法允许的解析错误的建议吗?

解决的一个问题是嵌入式换行符,在其中我发现WholeFile和多行选项有所帮助-但是我现在在了解哪些记录不被接受方面遇到了挑战。

我用来加载文件的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”。)

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

0 个答案:

没有答案