2
respostas

COMO importar excel no SPARK?

não consegui encontrar como fazer importação

2 respostas

Olá, Tabata! Tudo bem com você?

Desculpa pela demora em dar um retorno.

Encontrei duas abordagens para fazer essa importação. A primeira consiste primeiramente em criar um DataFrame do Pandas e então passar isso para o Spark da seguinte forma:

import pandas as pd
from pyspark.sql import SparkSession

spark = SparkSession.builder.appName("excel").getOrCreate()
df = pd.read_excel("Pasta de trabalho 1.xlsx")  # lendo o arquivo xlsx para o pandas
sdf = spark.createDataFrame(df)  # criando um dataframe do spark
sdf.show()

Saída:

+---+---+
|  A|  B|
+---+---+
|1.1|2.2|
|3.3|  C|
+---+---+

A outra forma é já usar o Spark para ler esses arquivos com o Pandas. Mas como assim?

Na versão Apache Spark™ 3.2 já vem a API do Pandas integrada, que fornece algumas vantagens em relação ao Pandas nativo, como pode ser consultado no artigo do Databricks "Pandas API on Upcoming Apache Spark™ 3.2".

Para isso você deve garantir que está utilizando uma versão do Pyspark maior ou igual a 3.2. Para fazer isso execute o seguinte comando em uma célula do seu notebook:

!pip install -U pyspark

Após a instalação ter sido concluída, reinicie seu kernel da seguinte forma:

Caso utilize o colab:

Barra superior de opções do ambiente do Google Colab com um retângulo de contorno vermelho sem preenchimento que enfatiza a opção "Ambiente de execução" e uma seta vermelha aponta para a opção "Reiniciar e executar tudo".

Caso utilize o jupyter:

Barra superior de funções do Jupyter Notebook, com um retângulo vermelho sem preenchimento destacando a opção Kernel, uma seta vermelha apontando para a opção Restart & Run All.

Após reiniciar o kernel execute o código abaixo:

import pyspark.pandas as ps 

print(ps.read_excel("Pasta de trabalho 1.xlsx").to_markdown())

Lembrar de trocar "Pasta de trabalho 1.xlsx" pelo nome do seu arquivo.

Saída:

AB
01.12.2
13.3C

Como recomendação de leitura complementar deixo a documentação da Pandas API on Spark.

Qualquer dúvida estou à disposição.

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.Bons Estudos!

Boa tarde, Bruno

Ambas as formas deram erro,

primeira forma e erro:

TypeError: field City: Can not merge type <class 'pyspark.sql.types.StringType'> and <class 'pyspark.sql.types.LongType'>

segunda forma e erro:

Expected bytes, got a 'int' object

Grata pela atenção!