Scala Spark中模式不匹配的处理
我正在使用Scala中的Spark读取csv文件。 模式是预定义的,我正在使用它进行阅读。 这是示例代码:Scala Spark中模式不匹配的处理,scala,apache-spark,Scala,Apache Spark,我正在使用Scala中的Spark读取csv文件。 模式是预定义的,我正在使用它进行阅读。 这是示例代码: // create the schema val schema= StructType(Array( StructField("col1", IntegerType,false), StructField("col2", StringType,false), StructField("col3", StringType,true))) // Initi
// create the schema
val schema= StructType(Array(
StructField("col1", IntegerType,false),
StructField("col2", StringType,false),
StructField("col3", StringType,true)))
// Initialize Spark session
val spark: SparkSession = SparkSession.builder
.appName("Parquet Converter")
.getOrCreate
// Create a data frame from a csv file
val dataFrame: DataFrame =
spark.read.format("csv").schema(schema).option("header", false).load(inputCsvPath)
根据我在使用模式阅读带有Spark的cav时所读到的内容,有3个选项:
dropmorformed
-->这将删除与架构不匹配的行提前感谢只需使用
DROPMALFORMED
并按照日志操作即可。如果存在格式不正确的记录,则会将其转储到日志中,直到maxmlformedlogperpartition
选项设置的限制
spark.read.format(“csv”)
.schema(schema)
.选项(“标题”,false)
.选项(“模式”、“格式不正确”)
.option(“maxMalformedLogPerPartition”,128)
.load(inputCsvPath)
这就是我最终所做的:我在模式中添加了“\u corrupt\u record”列,例如:
val schema= StructType(Array(
StructField("col1", IntegerType,true),
StructField("col2", StringType,false),
StructField("col3", StringType,true),
StructField("_corrupt_record", StringType, true)))
然后我使用许可模式读取CSV(默认为Spark):
现在,我的数据框包含一个额外的列,该列包含模式不匹配的行。
我筛选了数据不匹配的行,并将其打印出来:
val badRows = dataFrame.filter("_corrupt_record is not null")
badRows.cache()
badRows.show()
这个格式错误的记录在哪里转储并存储在哪个位置?我们还需要指定位置吗?
val badRows = dataFrame.filter("_corrupt_record is not null")
badRows.cache()
badRows.show()