Как читать файлы xlsx или xls как спрей данных - PullRequest
0 голосов
/ 03 июня 2019

Может кто-нибудь дать мне знать, не конвертируя файлы xlsx или xls, как мы можем прочитать их как фрейм данных spark?

Я уже пытался читать с пандами, а затем пытался конвертировать в фрейм данных spark, но получил ошибку иошибка

Ошибка:

Cannot merge type <class 'pyspark.sql.types.DoubleType'> and <class 'pyspark.sql.types.StringType'>

Код:

import pandas
import os
df = pandas.read_excel('/dbfs/FileStore/tables/BSE.xlsx', sheet_name='Sheet1',inferSchema='')
sdf = spark.createDataFrame(df)

1 Ответ

0 голосов
/ 12 июня 2019

В вашем сообщении нет данных о вашем Excel, но я воспроизвел ту же проблему, что и ваш.

Вот данные моего образца Excel test.xlsx, как показано ниже.

enter image description here

Вы можете видеть, что в моем столбце есть различные типы данных 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

Если мы попытались проверить dtypes из df столбцов через df.dtypes, мы увидим.

enter image description here

Значение 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

...