PySparkTypeError:[CANNOT_INFER_SCHEMA_FOR_TYPE] 无法推断类型的架构:`str`。对于spark.createDataFrame(dataframe)

问题描述 投票:0回答:1

我有一个pyspark.pandas.frame.DataFrame。我需要将其写入 Hive_metastore 表,但无法这样做。我有一个如下所示的数据框:

df: (df.dtypes)
COL-a      int32
Date       object
COL-b      float64
COL-c      float64
dtype: object
from pyspark.sql.types import StructType, StructField,StringType, IntegerType, FloatType, DateType

my_schema = StructType(\[
StructField("COL-a", IntegerType(), True),
StructField("Date", DateType(), True),
StructField("COL-b", FloatType(), True),
StructField("COL-c", FloatType(), True),

\])

df_spark = spark.createDataFrame(df, schema= my_schema)

# Create a temporary view of the DataFrame

df_spark.createOrReplaceTempView("hello_hi")

# Write the DataFrame to a table in Hive metastore

spark.sql("CREATE OR REPLACE TABLE Hive_metastore.Random_loc_1.Final_res AS SELECT \* FROM hello_hi")

我收到以下错误:

PySparkTypeError:  \[CANNOT_ACCEPT_OBJECT_IN_TYPE\] 
结构类型
can not accept object
COL-a
 in type str

为什么会发生这种情况以及如何解决?请帮忙。任何帮助将不胜感激

尝试了一切,但不知何故无法解决这个 my_schema 问题。没有 chatgpt 或 Databricks 助手可以帮助我。就连spark官方网页也没有很好的解释。

python pandas pyspark databricks delta-live-tables
1个回答
0
投票

COL-a
在您的模式中定义为
IntegerType()
,但错误表明它被视为字符串(str),似乎存在数据类型不一致。这可能是由于 pandas DataFrame df 转换为 PySpark DataFrame 的方式所致。

你能试试这个吗:

# Ensure correct data types in pandas DataFrame
df['COL-a'] = df['COL-a'].astype('int32')
df['Date'] = pd.to_datetime(df['Date'])  # Assuming 'Date' is in a format pandas can parse
df['COL-b'] = df['COL-b'].astype('float64')
df['COL-c'] = df['COL-c'].astype('float64')

# Let Spark infer the schema
df_spark = spark.createDataFrame(df)

df_spark.createOrReplaceTempView("hello_hi")

spark.sql("CREATE OR REPLACE TABLE Hive_metastore.Random_loc_1.Final_res AS SELECT * FROM hello_hi")
© www.soinside.com 2019 - 2024. All rights reserved.