问题场景
使用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
。所以提示该错误。
问题总结
编写代码的时候,逻辑要严谨,前后对应关系要梳理清楚。