Csv 在另存为拼花地板文件时,是否有方法将仅有的1000列从字符串转换为整数?

Csv 在另存为拼花地板文件时,是否有方法将仅有的1000列从字符串转换为整数?,csv,apache-spark,hive,pyspark,parquet,Csv,Apache Spark,Hive,Pyspark,Parquet,使用pyspark,我从JSON文件中提取1500个字段,保存为拼花地板,并创建配置单元外部表。 从JSON提取的所有字段都是字符串格式。在配置单元DDL中,所有列名都应为整数。 当我保存为拼花地板并查询配置单元表时,我看到以下错误: java.io.IOException:org.apache.hadoop.hive.ql.metadata.HiveException:java.lang.ClassCastException 有没有办法处理这个错误 在另存为拼花地板之前将列转换为Int有帮助。

使用pyspark,我从JSON文件中提取1500个字段,保存为拼花地板,并创建配置单元外部表。 从JSON提取的所有字段都是字符串格式。在配置单元DDL中,所有列名都应为整数。 当我保存为拼花地板并查询配置单元表时,我看到以下错误:

java.io.IOException:org.apache.hadoop.hive.ql.metadata.HiveException:java.lang.ClassCastException

有没有办法处理这个错误


在另存为拼花地板之前将列转换为Int有帮助。但是将1500列显式转换为整数是不可能的。

我知道一种更广泛的方法,如下所示:

>>> from pyspark.sql.types import *
>>> from pyspark.sql.functions import col
# Consider df to be the dataframe from reading the JSON file.
>>> df.show()
+-------+------+
|details|header|
+-------+------+
|    def|   2.0|
+-------+------+

>>> df.printSchema()
root
 |-- details: string (nullable = true)
 |-- header: string (nullable = true)

# Convert all columns to integer type.
>>> df_parq=df.select(*(col(c).cast(IntegerType()).alias(c) for c in df.columns))
>>> df_parq.printSchema()
root
 |-- details: integer (nullable = true)
 |-- header: integer (nullable = true)

# Write file with modified column types to Parquet.
>>> df_parq.write.parquet('F:\Parquet\sample_out3')
>>> df_read_parq=spark.read.parquet('F:\Parquet\sample_out3')
>>> df_read_parq.printSchema()
root
 |-- details: integer (nullable = true)
 |-- header: integer (nullable = true)