由于某些字段的值未知,使用 Spark 写入 parquet 文件的数字格式异常 [重复]
Posted
技术标签:
【中文标题】由于某些字段的值未知,使用 Spark 写入 parquet 文件的数字格式异常 [重复]【英文标题】:Number format exception writing parquet file using Spark caused by some fields having unknown value [duplicate] 【发布时间】:2018-09-18 05:49:54 【问题描述】:我正在使用带有以下架构的 spark 读取文本文件。
root
|-- id: long (nullable = true)
|-- name: string (nullable = true)
|-- style: string (nullable = true)
|-- code: integer (nullable = true)
|-- state_code: integer (nullable = true)
|-- post_code: integer (nullable = true)
|-- mail: string (nullable = true)
这是我的 Scala 代码
val myDf = sqlContext.read.format("csv")
.option("header", "true")
.option("inferSchema", "false")
.schema(myschema)
.option("delimiter", "|")
.option("nullValue", "")
.option("treatEmptyValuesAsNulls", "true")
.load("Path to file")
在这个输入文件中,一些列的值为“\N”。我想用空(“”)替换所有值为“\ N”的库尔姆值。当我尝试将此数据框写为镶木地板文件时
myDf.na.replace(myDf.columns.toSeq, Map("\\N" -> "")).write.format("parquet").save("path to output")
抛出异常
java.lang.NumberFormatException: For input string: "\N"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:12)
at java.lang.Integer.parseInt(Integer.java:80)
通过解决问题来编写 parquet 文件有什么帮助吗?
【问题讨论】:
试试这个:Map("\\\\N" -> "")) @SCouto 没有办法仍然得到同样的异常 答案已在您之前的问题中提供。请检查一次***.com/questions/52368658/… @ChandanRay 解决方案不起作用 @Juhan 你得到我提供的解决方案的问题是什么。请检查。不要打开 2 个相同的问题。 【参考方案1】:猜猜,异常不是在写的时候发生的,而是在读的时候发生的。
如果将 int 字段分配给 CSV 文件的架构,并且文件中的字段值包含“\N
”,则会发生此类错误。
猜猜,您可以将 Parquet 中的保存替换为其他操作(显示等)并获得相同的异常。
【讨论】:
myDf .na.replace(myDf .columns,Map("\\\\N" -> "")).show() 也抛出同样的异常 请尝试不使用“na.replace”。同样从你的测试来看,这不是 Parquet 保存问题,而是阅读问题,需要另一个修复。 是的,即使 myDf .show() 也会抛出同样的异常 表示schema与CSV文件结构不匹配,可以改正。 架构已修复,读取文件时有什么方法可以替换\N以上是关于由于某些字段的值未知,使用 Spark 写入 parquet 文件的数字格式异常 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
使用Spark 编码 写入 hive 的过程中 hive字段乱码 [解决方案]
使用Spark 编码 写入 hive 的过程中 hive字段乱码 [解决方案]
Spark SQL中Dataframe join操作含null值的列