出現(xiàn)這個(gè)問(wèn)題是因?yàn)樵趐arquet數(shù)據(jù)中院促,有的column數(shù)據(jù)類(lèi)型不一致。
發(fā)現(xiàn)這個(gè)問(wèn)題是在load data的時(shí)候。如果 load 的數(shù)據(jù)是多路徑的统翩,有兩種方式可以完成:
方式一:
val df = (0 util ndays).map{ i=>
path = $"{prefix_path}_{i}"
val tmpdf = spark.read.parquet(path)
tmpdf
}.reduce(_union_)
方式二:
val paths = (0 util ndays).map{i=>
$"{prefix_path}_{i}"
}
val df = spark.read.parquet(paths:_*)
相對(duì)來(lái)說(shuō),方式二是官方推薦的方式此洲,加載的時(shí)候占用的內(nèi)存更少一些厂汗,方式一會(huì)在每次load的時(shí)候都把路徑下的data都遍歷。
然后提到這里出現(xiàn)的bug呜师,是因?yàn)橛幸涣械臄?shù)據(jù)類(lèi)型不一樣娶桦,一個(gè)是integer,一個(gè)是long汁汗。使用方式一并不會(huì)出現(xiàn)衷畦,因?yàn)閞educe的時(shí)候會(huì)自動(dòng)做類(lèi)型轉(zhuǎn)換(如果可以轉(zhuǎn)的話(huà)),所以最后這列的type就是long知牌。但是方式二是用一個(gè)schema去load數(shù)據(jù)的祈争,所以就出現(xiàn)了這個(gè)類(lèi)型不一致的錯(cuò)誤。