Оптимизация преобразования между PySpark и Pandas DataFrames
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, значительно сократилось за счет использования оптимизированной версии.