問題場景
使用spark進行業務統計的時候,統計過程中觸發這個問題,並導致程序異常退出
問題環境
- spark 1.6
- scala 2.10.6
- 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
。所以提示該錯誤。
問題總結
編寫代碼的時候,邏輯要嚴謹,前後對應關係要梳理清楚。