scala & spark實戰
阿新 • • 發佈:2017-09-27
錯誤提示 replace nbsp pan tex stats sql mes int java.lang.Long is not a valid external type for schema of string
java.lang.RuntimeException: Error while encoding: java.lang.RuntimeException: java.lang.String is not a valid external type for schema of bigint
原代碼:
val rddStatsEcSubsDay4G = sc.textFile(path + "test").map(_.split(","))
.map(r => Row(r(0), r(1), DateTimeTool.toTimestamp(r(2), pattern)))
sqlContext.createDataFrame(rddStatsEcSubsDay4G, Schema.TEST)
map類型和schema類型不一致導致問題,Schema中定義為Long,但是map的時候映射為String,這裏只要把r(1)變為r(1).toLong即可。
java.lang.IllegalArgumentException: Invalid format: "2016-11-22 15:42:42" is malformed at "-11-22 15:42:42"
數據提供的格式yyyy-MM-dd HH:mm:ss和map中定義的DateTimeTool.toDate(r(8), pattern)pattern不一致導致(源代碼中pattern中是"yyyy/MM/dd HH:mm:ss"),根據錯誤提示可以知道,只是匹配到了年,之後格式無法匹配
java.lang.RuntimeException: Error while encoding: java.lang.RuntimeException: java.sql.Date is not a valid external type for schema of timestamp
因為在TestBase中定義這在map的時候將某個字段映射為Date:
val rddGroupInfo = sc.textFile(path + "cm_cu_groupinfo")
.map(_.replaceAll("null", "0"))
.map(_.split(",")).map(r => Row(r(0), r(1), r(2), r(3), r(4), r(5), r(6),
DateTimeTool.toDate(r(7), pattern), DateTimeTool.toDate(r(8), pattern)))
加粗部分修改為toTimestamp即可,還是map類型和schema中類型不一致造成
java.lang.ArrayIndexOutOfBoundsException: 22
發現原來是23,24列都為null,因為沒有填充null導致
scala & spark實戰