天天看點

Caused by: java.lang.NumberFormatException: For input string: “|“

Caused by: java.lang.NumberFormatException: For input string: “|“

這個異常是在使用spark進行資料清洗處理的時候出現的異常,在百度上搜尋,發現類似的異常都是出現在jsp頁面的參數設定中,困擾了好半天。

1|24|M|technician|85711

2|53|F|other|94043

3|23|M|writer|32067

4|24|M|technician|43537

5|33|F|other|15213

6|42|M|executive|98101

7|57|M|administrator|91344

8|36|M|administrator|05201

9|29|M|student|01002

10|53|M|lawyer|90703

這是原本的資料格式,以“|”作為分隔符,是以一般的思路也是把”|”作為分隔依據

//讀取資料HDFS上
    val userRdd = sc.sparkContext.textFile("file:///C:/Users/Administrator/Desktop/ml-100k/u.user")
      .map(line=>(line.split("|"))) //需要進行轉義
      .map(t=>User(t(0).toInt,t(1).toInt,t(2),t(3),t(4).toInt))
    //4.導入相關的隐士依賴
    import  sc.implicits._
    val UserDF = userRdd.toDF()
    UserDF.select($"id",$"age",$"sex",$"occuption",$"number")
        .show()
           

這是代碼塊,這是在這裡忽略了切割字元需要進行轉義,不然确實會出現格式異常,在對“|”做了轉義處理後,正确得到了結果

正确的代碼塊

//讀取資料HDFS上
    val userRdd = sc.sparkContext.textFile("file:///C:/Users/Administrator/Desktop/ml-100k/u.user")
      .map(line=>(line.split("\\|"))) //需要進行轉義
      .map(t=>User(t(0).toInt,t(1).toInt,t(2),t(3),t(4).toInt))
    //4.導入相關的隐士依賴
    import  sc.implicits._
    val UserDF = userRdd.toDF()
    UserDF.select($"id",$"age",$"sex",$"occuption",$"number")
        .show()

    sc.stop()
           

運作結果

Caused by: java.lang.NumberFormatException: For input string: “|“

繼續閱讀