scala load data出现org.apache.parquet.column.values.dictionary.PlainValuesDictionary$PlainLongDicti...

出现这个问题是因为在parquet数据中,有的column数据类型不一致。
发现这个问题是在load data的时候。如果 load 的数据是多路径的,有两种方式可以完成:
方式一:

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:_*)

相对来说,方式二是官方推荐的方式,加载的时候占用的内存更少一些,方式一会在每次load的时候都把路径下的data都遍历。
然后提到这里出现的bug,是因为有一列的数据类型不一样,一个是integer,一个是long。使用方式一并不会出现,因为reduce的时候会自动做类型转换(如果可以转的话),所以最后这列的type就是long。但是方式二是用一个schema去load数据的,所以就出现了这个类型不一致的错误。

你可能感兴趣的:(scala load data出现org.apache.parquet.column.values.dictionary.PlainValuesDictionary$PlainLongDicti...)