1. 程式人生 > >scala & spark實戰

scala & spark實戰

錯誤提示 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實戰