Apache spark Spark read CSV-不显示腐蚀记录

Apache spark Spark read CSV-不显示腐蚀记录,apache-spark,apache-spark-sql,databricks,Apache Spark,Apache Spark Sql,Databricks,Spark具有读取CSV文件的Permissive模式,该模式将腐蚀记录存储到名为\u corrupt\u record的单独列中 宽容的- 当遇到损坏的记录时,将所有字段设置为null,并将所有损坏的记录放在字符串列中 被称为\u损坏的\u记录 然而,当我尝试以下示例时,我没有看到任何名为\u corruptu\u record的列。与架构不匹配的记录似乎为null data.csv data 10.00 11.00 $12.00 $13 gaurang 代码 import org.apac

Spark具有读取
CSV
文件的
Permissive
模式,该模式将腐蚀记录存储到名为
\u corrupt\u record
的单独列中

宽容的- 当遇到损坏的记录时,将所有字段设置为null,并将所有损坏的记录放在字符串列中 被称为\u损坏的\u记录

然而,当我尝试以下示例时,我没有看到任何名为
\u corruptu\u record
的列。与架构不匹配的记录似乎为
null

data.csv

data
10.00
11.00
$12.00
$13
gaurang
代码

import org.apache.spark.sql.types.{StructField, StructType, StringType, LongType, DecimalType}
val schema = new StructType(Array(
new StructField("value", DecimalType(25,10), false)
))
val df = spark.read.format("csv") 
  .option("header", "true") 
  .option("mode", "PERMISSIVE") 
  .schema(schema) 
  .load("../test.csv")
scala> df.printSchema()
root
 |-- value: decimal(25,10) (nullable = true)


scala> df.show()
+-------------+
|        value|
+-------------+
|10.0000000000|
|11.0000000000|
|         null|
|         null|
|         null|
+-------------+
模式

import org.apache.spark.sql.types.{StructField, StructType, StringType, LongType, DecimalType}
val schema = new StructType(Array(
new StructField("value", DecimalType(25,10), false)
))
val df = spark.read.format("csv") 
  .option("header", "true") 
  .option("mode", "PERMISSIVE") 
  .schema(schema) 
  .load("../test.csv")
scala> df.printSchema()
root
 |-- value: decimal(25,10) (nullable = true)


scala> df.show()
+-------------+
|        value|
+-------------+
|10.0000000000|
|11.0000000000|
|         null|
|         null|
|         null|
+-------------+

如果我将模式更改为
FAILFAST
,当我尝试查看数据时,会出现错误

根据Andrew和Prateek的建议添加
\u corroup\u记录
,解决了这个问题

import org.apache.spark.sql.types.{StructField, StructType, StringType, LongType, DecimalType}
val schema = new StructType(Array(
  new StructField("value", DecimalType(25,10), true),
  new StructField("_corrupt_record", StringType, true)
))
val df = spark.read.format("csv") 
  .option("header", "true") 
  .option("mode", "PERMISSIVE") 
  .schema(schema) 
  .load("../test.csv")
查询数据

scala> df.show()
+-------------+---------------+
|        value|_corrupt_record|
+-------------+---------------+
|10.0000000000|           null|
|11.0000000000|           null|
|         null|         $12.00|
|         null|            $13|
|         null|        gaurang|
+-------------+---------------+

您必须将_corrupt_record添加到架构中。添加(“_corrupt_record”,StringType,true)//架构包含一个特殊列_corrupt_record,该列在数据中不存在。此列捕获未正确解析的行。看见