Scala_Spark_DataFrameReader_csv的文档表明,spark可以记录在读取.csv文件时检测到的格式错误的行。
- 如何记录格式错误的行?
- 可以获得包含格式错误的行的val或var吗?
链接文档中的选项是: maxMalformedLogPerPartition(默认值为10):设置Spark将为每个分区记录的最大格式错误行数。超出此数字的格式错误的记录将被忽略
答案 0 :(得分:1)
基于此databricks example,当您读取文件时,需要在架构定义中明确添加“ _corrupt_record”列。像这样的东西在pyspark 2.4.4中对我有用:
from pyspark.sql.types import *
my_schema = StructType([
StructField("field1", StringType(), True),
...
StructField("_corrupt_record", StringType(), True)
])
my_data = spark.read.format("csv")\
.option("path", "/path/to/file.csv")\
.schema(my_schema)
.load()
my_data.count() # force reading the csv
corrupt_lines = my_data.filter("_corrupt_record is not NULL")
corrupt_lines.take(5)
答案 1 :(得分:0)
如果您使用的是spark 2.3,请检查_corrupt_error特殊列...根据一些spark讨论,“它应该工作”,因此在读取过滤器后,那些非空cols的对象-应该有您的错误...也可以检查input_file_name()sql func
如果您使用的版本不低于2.3,则应实现自定义的read,record解决方案,因为根据我的测试,_corrupt_error不适用于csv数据源...