2017-07-26 16 views
1

私はcloudera vmを使用しています。 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:入力文字列の場合: ""

なぜ2番目のコードでも例外が発生していますそれは最初のものと同じですか?

+0

あなたの入力はどのように見えますか? –

+0

1009 | 45 |ダイアモンド恐れなしイービルコンパウンドボウパッケージ|| 599.99 | http://images.acmesports.sports/Diamond+Fear+No+Evil+Compound+Bow+Package 1010 | 46 | DBXベクトルシリーズメンズナイロンライフベスト|| 19.98 | http://images.acmesports.sports/DBX+Vector+Series+Men%27s+Nylon+Life+Vest – Ela

答えて

1

エラーはあなたが_.split('|')または_.split("\\|")または_.split("""\|""")またはPattern.quote("|")

を使用する必要があなたのコード

の第二部で_.split("|")によるものであるあなたが"|"を使用する場合には、正規表現と|を分割しようとしていますか正規表現では何も一致しないので、空の文字列を返します""

これは役に立ちます。

+0

ありがとうございます。それは問題を解決した。 – Ela

+0

回答としてお答えいただきありがとうございます:) –

関連する問題