如何从Scala Spark DataFrameReader csv记录格式错误的行

时间:2017-01-27 13:09:54

标签: scala csv logging apache-spark

Scala_Spark_DataFrameReader_csv的文档表明,spark可以记录在读取.csv文件时检测到的格式错误的行。
- 如何记录格式错误的行?
- 可以获得包含格式错误的行的val或var吗?

链接文档中的选项是: maxMalformedLogPerPartition(默认值为10):设置Spark将为每个分区记录的最大格式错误行数。超出此数字的格式错误的记录将被忽略

2 个答案:

答案 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数据源...