使用 Apache Spark 读取 csv 文件时,哪个单元格使输入行成为损坏行

问题描述 投票:0回答:1

有:

  • 包含很多列的 csv 文件。
  • 损坏记录集的 PERMISSIVE 模式和列名称。

有什么方法可以找出哪个特定单元格导致一行被标记为损坏
使用默认方法,我只能看到(在损坏的列中)输入行,而没有任何提示该行中哪个单元格有问题。
(如果有任何与此平台相关的建议,我无法使用 Databricks)

csv apache-spark schema
1个回答
0
投票

唯一的事情是检查 DF 中的列是否为空值,并在所有列上使用 FoldLeft 连接到单个输出字段,并将空值的列聚合到单个字段。

但是,如果这些字段也可以为空,那么这没有帮助。

当然,您也会在记录中检查损坏的列。

val badDf = someDF.filter($"_corrupt_record".isNotNull). ...apply foldLeft logic...

请参阅 https://www.sparkcodehub.com/spark/spark-dataframe-foldleft-foldright-guide 了解 FoldLeft 示例。

一些灵感,略有不同的示例:

val columns = Array("col1", "col2", "col3") 
val totalCol = columns.foldLeft(lit(0)) { 
     (total, colName) => total + col(colName) 
} 
val dfTotal = df.withColumn("total", totalCol) 

这已经是最好的了,并不是 100% 万无一失。

© www.soinside.com 2019 - 2024. All rights reserved.