Apache spark Spark:从拼花地板读取一个int列,长度为

Apache spark Spark:从拼花地板读取一个int列,长度为,apache-spark,parquet,Apache Spark,Parquet,我有一个拼花文件,由spark读取作为外部表 其中一列在拼花地板模式和spark表中都定义为int 最近,我发现int对于我的需要来说太小了,所以我在新的拼花文件中将列类型改为long。 我还将spark表中的类型更改为bigint 但是,当我试图通过spark将旧的拼花地板文件(使用int)作为外部表(使用bigint)读取时,我得到以下错误: java.lang.UnsupportedOperationException:org.apache.parquet.column.values.di

我有一个拼花文件,由spark读取作为外部表

其中一列在拼花地板模式和spark表中都定义为int

最近,我发现int对于我的需要来说太小了,所以我在新的拼花文件中将列类型改为long。 我还将spark表中的类型更改为bigint

但是,当我试图通过spark将旧的拼花地板文件(使用int)作为外部表(使用bigint)读取时,我得到以下错误:

java.lang.UnsupportedOperationException:org.apache.parquet.column.values.dictionary.PlainValuesDictionary$PlainIntegerDictionary

一个可能的解决方案是将旧拼花地板中的柱类型改为long,这是我在这里询问的:,但这非常昂贵,因为我有很多数据

另一种可能的解决方案是根据每个拼花地板文件的模式将其读取到不同的spark表中,并创建新旧表的联合视图,这非常难看


有没有其他方法可以从拼花地板中读取一个int列作为spark中的long?

使用pyspark难道你就不能这样做吗

df = spark.read.parquet('path to parquet files')
只需更改数据框中的列类型即可

new_df = (df
          .withColumn('col_name', col('col_name').cast(LongType()))
         )

然后用覆盖模式将新数据帧保存到同一位置

找到解决方案了吗?没有。。。。。。。。。。。。。