Apache spark 我如何查询损坏的记录而不使用Azure Databricks中的Pyspark缓存数据?

Apache spark 我如何查询损坏的记录而不使用Azure Databricks中的Pyspark缓存数据?,apache-spark,caching,pyspark,databricks,corrupt,Apache Spark,Caching,Pyspark,Databricks,Corrupt,我对数据库中的损坏记录有问题。我们希望统计损坏的记录,并将损坏的记录保存在特定位置作为增量表。 为此,我们使用PERMISSIVE进行阅读,并基于此_corrupt_record列进行查询 我们在Azure Databricks中将pyspark与Apache Spark 3.0.1一起使用 下面是我们得到的错误消息: 自Spark 2.3以来,来自原始 当引用的列仅包括时,不允许使用JSON/CSV文件 默认情况下,名为_corrupt_record的内部损坏记录列。 例如: spark.re

我对数据库中的损坏记录有问题。我们希望统计损坏的记录,并将损坏的记录保存在特定位置作为增量表。 为此,我们使用PERMISSIVE进行阅读,并基于此_corrupt_record列进行查询

我们在Azure Databricks中将pyspark与Apache Spark 3.0.1一起使用

下面是我们得到的错误消息:

自Spark 2.3以来,来自原始 当引用的列仅包括时,不允许使用JSON/CSV文件 默认情况下,名为_corrupt_record的内部损坏记录列。 例如: spark.read.schemaschema.jsonfile.filter$\u corrupt\u record.isNotNull.count 和 spark.read.schemaschema.jsonfile.select\u corrupt\u record.show

根据这一点,如果要查询列损坏记录,必须缓存或保存数据

但我们不想在ETL中缓存数据。ETL用于在同一集群上运行的许多作业,我们可以将150GB的大文件作为输入。缓存数据可能会导致群集崩溃

有没有办法在不缓存数据的情况下查询这些损坏的记录

1将数据保存在blob存储器上可能是另一种选择,但这听起来会带来很大的开销

2我们还尝试使用选项BadRecordsPath:将坏记录保存到BadRecordsPath并将其读回以便计数,但是没有简单的方法可以知道是否写入了坏记录文件以及文件写入了哪个分区。 分区看起来像/20210425T102409/bad_记录

看到我的另一个问题了吗

3另一种方法是从允许读取执行substract dropmorformed读取。 例如:

但我不确定它会比缓存占用更少的内存

如有任何建议或意见,将不胜感激!提前谢谢

dataframe_with_corrupt = spark.read.format('csv').option("mode", "PERMISSIVE").load(path)
dataframe_without_corrupt = spark.read.format('csv').option("mode", "DROPMALFORMED").load(path)

corrupt_df = dataframe_with_corrupt.exceptAll(dataframe_without_corrupt)