2017-07-26 89 views
1

我正在使用cloudera虚拟机。我已将retail_db的产品表格作为textfile'|'作为字段分隔符(使用sqoop)导入。java.lang.NumberFormatException:对于输入字符串:“”,同时创建数据帧

以下是表模式:

mysql> describe products; 
product_id: int(11) 
product_category_id: int(11) 
product_name: varchar(45) 
product_description: varchar(255) 
product_price: float 
product_image: varchar(255) 

我想创建这个数据的数据帧。

我没有问题,而使用如下代码:

var products = sc.textFile("/user/cloudera/ex/products").map(r => {var p = r.split('|'); (p(0).toInt, p(1).toInt, p(2), p(3), p(4).toFloat, p(5))}) 
case class Products(productID: Int, productCategory: Int, productName: String, productDescription: String, productPrice: Float, productImage: String) 
var productsDF = products.map(r => Products(r._1, r._2, r._3, r._4, r._5, r._6)).toDF() 

productsDF.show() 

但我得到了NumberFormatException exception为下面的代码:

case class Products (product_id: Int, product_category_id: Int, product_name: String, product_description: String, product_price: Float, product_image: String) 
val productsDF = sc.textFile("/user/cloudera/ex/products").map(_.split("|")).map(p => Products(p(0).trim.toInt, p(1).trim.toInt, p(2), p(3), p(4).trim.toFloat, p(5))).toDF() 
productsDF.show() 

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

为什么我在第二个代码甚至t这跟第一个一样吗?

+0

你的输入是什么样的? –

+0

1009 | 45 |钻石恐惧无邪复合弓包|| 599.99 | http://images.acmesports.sports/Diamond+Fear+No+Evil+Compound+Bow+Package 1010 | 46 | DBX矢量系列男士尼龙Life Vest || 19.98 | http://images.acmesports.sports/DBX+Vector+Series+Men%27s+Nylon+Life+Vest – Ela

回答

1

的错误是由于_.split("|")在你的代码的第二部分

你需要的,如果你使用"|"它试图用正则表达式来分割使用_.split('|')_.split("\\|")_.split("""\|""")Pattern.quote("|")

|是或在正则表达式,所以它不匹配任何东西,并返回空字符串""

希望这有助于!

+0

非常感谢Shankar。它解决了这个问题。 – Ela

+0

感谢您接受为答复:) –

相关问题