В вашем сообщении нет данных о вашем Excel, но я воспроизвел ту же проблему, что и ваш.
Вот данные моего образца Excel test.xlsx
, как показано ниже.
![enter image description here](https://i.stack.imgur.com/cCsiq.png)
Вы можете видеть, что в моем столбце есть различные типы данных B
: двойное значение 2.2
и строковое значение C
.
Так что, если я запусту приведенный ниже код,
import pandas
df = pandas.read_excel('test.xlsx', sheet_name='Sheet1',inferSchema='')
sdf = spark.createDataFrame(df)
он вернет ту же ошибку, что и ваша.
TypeError: field B: Can not merge type <class 'pyspark.sql.types.DoubleType'> and class 'pyspark.sql.types.StringType'>
![enter image description here](https://i.stack.imgur.com/wV2ei.png)
Если мы попытались проверить dtypes
из df
столбцов через df.dtypes
, мы увидим.
![enter image description here](https://i.stack.imgur.com/gZbJT.png)
Значение dtype
столбца B
равно object
, функция spark.createDateFrame
не может вывести реальный тип данных для столбца B из реальных данных.Таким образом, чтобы исправить это, решение состоит в том, чтобы передать схему, чтобы помочь выводу типа данных для столбца B, как показано ниже:
from pyspark.sql.types import StructType, StructField, DoubleType, StringType
schema = StructType([StructField("A", DoubleType(), True), StructField("B", StringType(), True)])
sdf = spark.createDataFrame(df, schema=schema)
Чтобы сделать столбец B равным StringType
, чтобы разрешить конфликт типов данных.
![enter image description here](https://i.stack.imgur.com/COGSu.png)