【发布时间】:2018-06-02 23:35:34
【问题描述】:
我有一个 parquet 文件,由 spark 作为外部表读取。
其中一列在 parquet 模式和 spark 表中都定义为 int。
最近,我发现 int 对于我的需要来说太小了,所以我在新的 parquet 文件中将列类型更改为 long。 我还将 spark 表中的类型更改为 bigint。
但是,当我尝试通过 spark 作为外部表(使用 bigint)读取旧 parquet 文件(使用 int)时,出现以下错误:
java.lang.UnsupportedOperationException: org.apache.parquet.column.values.dictionary.PlainValuesDictionary$PlainIntegerDictionary
一种可能的解决方案是将旧 parquet 中的列类型更改为 long,我在这里询问过:How can I change parquet column type from int to long?,但由于我有很多数据,它非常昂贵。
另一种可能的解决方案是将每个parquet文件根据其schema读取到不同的spark表中,并创建新旧表的union view,这很丑。
还有另一种方法可以从 parquet 中读取一个 int 列,只要在 spark 中?
【问题讨论】:
-
你找到解决办法了吗?
-
不......
标签: apache-spark parquet