Оптимизация преобразования между 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 librariesimport pandas as pdimport pyspark # initializing the PySpark sessionspark = pyspark.sql.SparkSession.builder.getOrCreate() # creating a pandas DataFramedf = pd.DataFrame({ "Cardinal":[1, 2, 3], "Ordinal":["First","Second","Third"]}) # converting the pandas DataFrame into a PySpark DataFramedf = spark.createDataFrame(df) # printing the first two rowsdf.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 Libraryimport pyspark # from PySpark importing Row for creating DataFramefrom pyspark import Row # initializing PySpark sessionspark = pyspark.sql.SparkSession.builder.getOrCreate() # creating a PySpark DataFramespark_df = spark.createDataFrame([ Row(Cardinal=1, Ordinal="First"), Row(Cardinal=2, Ordinal="Second"), Row(Cardinal=3, Ordinal="Third")]) # converting spark_dataframe into a pandas DataFramepandas_df = spark_df.toPandas() pandas_df.head() |
Выход:
Теперь мы проверим время, необходимое для выполнения вышеуказанного преобразования.
Python3
%%timeimport numpy as npimport pandas as pd # creating session in PySparkspark = pyspark.sql.SparkSession.builder.getOrCreate() # creating a PySpark DataFramespark_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
%%timeimport numpy as npimport pandas as pd # creating session in PySparkspark = pyspark.sql.SparkSession.builder.getOrCreate() # creating a PySpark DataFramespark_df = spark.createDataFrame(pd.DataFrame(np.reshape (np.random.randint(1, 101, size=100), newshape=(10, 10)))) # enabling PyArrowspark.conf.set("spark.sql.execution.arrow.enabled", "true")spark_df.toPandas() |
Выход
460 ms
Здесь мы видим, что время, необходимое для преобразования фрейма данных PySpark и Pandas, значительно сократилось за счет использования оптимизированной версии.