首页 > 解决方案 > java.lang.NumberFormatException:对于输入字符串:“|”

问题描述

我已将表导入 HDFS 作为

由“|”终止的字段

sqoop import \
--connect jdbc:mysql://connection \
--username  \
--password  \
--table products \
--as-textfile \
--target-dir /user/username/productsdemo \
--fields-terminated-by '|'

之后,我尝试使用 spark-shell 版本 1.6.2 将其读取为 RDD

var productsRDD = sc.textFile("/user/username/productsdemo")

并将其转换为数据框

var productsDF = productsRDD.map(product =>{ 
var o = product.split("|");
products(o(0).toInt,o(1).toInt,o(2),o(3),o(4).toFloat,o(5))
}).toDF("product_id", "product_category_id","product_name","product_description","product_price","product_image" )

但是当我尝试打印输出时,它会抛出以下异常。

java.lang.NumberFormatException:对于输入字符串:“|”

为什么我收到此错误,任何人都可以帮助我解决这个问题吗?

标签: scalaapache-sparkhadoopsqoop

解决方案


split用于regex进行拆分字符串,因为|是正则表达式中的特殊字符意味着OR您需要在拆分时使用\\|而不是|

var o = product.split("\\|");

推荐阅读