問題解決:scala.MatchError: 816356 (of class java.lang.Integer)

問題場景

使用spark進行業務統計的時候,統計過程中觸發這個問題,並導致程序異常退出

問題環境

  1. spark 1.6
  2. scala 2.10.6
  3. jdk 1.7.0_79

問題分析

首先,先看看問題報錯提示的具體代碼,如下:

hiveContext.createDataFrame(finalList, RowUtil.buildUserMdnSchema())

從這裏,我們就可以知道,要麼是finalList的參數個數或者參數類型和buildUserMdnSchema()的返參schema對不上。這裏我們來具體看看schema的具體定義:

def buildUserMdnSchema(): StructType = {
    val schema = types.StructType(
      List(
        StructField("minutes", IntegerType, false),
        StructField("I_EVENT_ID", StringType, false),
        StructField("i_num", IntegerType, false),
        StructField("i_count_type", StringType, false),
        StructField("S_FIELD_ID", StringType, false)
      )
    )
}

finalList的參數呢,讓我們看看主要的數據錄入的代碼:

result.put(one._1,Row.fromSeq(Seq(eventId,num,"3",fifldId)))

從上面兩個應該可以知道,是參數個數對不上(schema指定了5個參數,而錄入只有4個參數),導致數據類型錯位,本來是StringType類型的eventId要被轉換爲IntegerType。所以提示該錯誤。

問題總結

編寫代碼的時候,邏輯要嚴謹,前後對應關係要梳理清楚。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章