Оптимизация преобразования между PySpark и Pandas DataFrames

Опубликовано: 20 Февраля, 2023

PySpark и Pandas — это две библиотеки с открытым исходным кодом, которые используются для анализа данных и обработки данных в Python. Ниже приводится краткое описание обоих из них.

Преобразование между PySpark и Pandas DataFrames

В этой статье мы поговорим о том, как мы можем преобразовать фрейм данных PySpark в фрейм данных Pandas и наоборот. Их преобразование можно легко сделать в PySpark.

Преобразование Pandas DataFrame в PySpark DataFrame

Здесь мы будем преобразовывать Pandas DataFrame в PySpark DataFrame. Прежде всего, мы импортируем библиотеки PySpark и Pandas. Тогда мы начнем сеанс. позже мы создадим Pandas DataFrame и преобразуем его в PySpark DataFrame. Для этого мы создадим кадр данных PySpark с помощью метода createDataFrame() и сохраним его в той же переменной, в которой мы сохранили кадр данных Pandas. Внутри метода createDataFrame() в качестве параметра мы будем передавать имя pandas DataFrame. Эти шаги преобразуют Pandas DataFrame в PySpark DataFrame.

Пример:

Python3




# importing pandas and PySpark libraries
import pandas as pd
import pyspark
  
# initializing the PySpark session
spark = pyspark.sql.SparkSession.builder.getOrCreate()
  
# creating a pandas DataFrame
df = pd.DataFrame({
  "Cardinal":[1, 2, 3],
  "Ordinal":["First","Second","Third"]
})
  
# converting the pandas DataFrame into a PySpark DataFrame
df = spark.createDataFrame(df)
  
# printing the first two rows
df.show(2)

Выход:

В случае, если вы хотите использовать DataFrame pandas позже, вы можете сохранить PySpark DataFrame в другой переменной.

Преобразование PySpark DataFrame в Pandas DataFrame

Теперь мы будем конвертировать PySpark DataFrame в Pandas DataFrame. Все шаги одинаковы, но на этот раз мы будем использовать метод toPandas(). Мы будем использовать метод toPandas() и конвертируем наш PySpark DataFrame в Pandas DataFrame.

Синтаксис для использования метода toPandas():

spark_DataFrame.toPandas()

Пример:

Python3




# importing PySpark Library
import pyspark
  
# from PySpark importing Row for creating DataFrame
from pyspark import Row
  
# initializing PySpark session
spark = pyspark.sql.SparkSession.builder.getOrCreate()
  
# creating a PySpark DataFrame
spark_df = spark.createDataFrame([
  Row(Cardinal=1, Ordinal="First"),
  Row(Cardinal=2, Ordinal="Second"),
  Row(Cardinal=3, Ordinal="Third")
])
  
# converting spark_dataframe into a pandas DataFrame
pandas_df = spark_df.toPandas()
  
pandas_df.head()

Выход:

Теперь мы проверим время, необходимое для выполнения вышеуказанного преобразования.

Python3




%%time
import numpy as np
import pandas as pd
  
# creating session in PySpark
spark = pyspark.sql.SparkSession.builder.getOrCreate()
  
# creating a PySpark DataFrame
spark_df = spark.createDataFrame(pd.DataFrame(np.reshape
           (np.random.randint(1, 101, size=100), newshape=(10, 10))))
spark_df.toPandas()

Выход

3.17 s

Теперь давайте включим PyArrow и посмотрим, сколько времени занимает процесс.

Python3




%%time
import numpy as np
import pandas as pd
  
# creating session in PySpark
spark = pyspark.sql.SparkSession.builder.getOrCreate()
  
  
# creating a PySpark DataFrame
spark_df = spark.createDataFrame(pd.DataFrame(np.reshape
           (np.random.randint(1, 101, size=100), newshape=(10, 10))))
  
# enabling PyArrow
spark.conf.set("spark.sql.execution.arrow.enabled", "true")
spark_df.toPandas()

Выход

460 ms

Здесь мы видим, что время, необходимое для преобразования фрейма данных PySpark и Pandas, значительно сократилось за счет использования оптимизированной версии.