преобразование между искрой df, паркетным объектом и пандами df - PullRequest
0 голосов
/ 21 октября 2019

Я без проблем преобразовал файл паркета в pandas, но имел проблему с преобразованием паркета в spark df и преобразованием spark df в pandas.

после создания сеанса spark, я запустил эти коды

spark_df = spark.read.parquet ('summarydata.parquet')

spark_df.select ('*'). toPandas ()

Возвращает ошибку enter image description here

В качестве альтернативы, с паркетным объектом (pd.read_table ('summary data.parquet'), как я могу преобразовать его в spark df?

Причина, по которой мне нужны оба sparkdf и pandas df заключается в том, что для некоторых меньших DataFrame я хочу легко использовать различные функции EDA для панд, но для некоторых более крупных мне нужно использовать spark sql. И превращение паркета в pandas сначала, а затем в spark df кажется небольшим обходом.

1 Ответ

1 голос
/ 21 октября 2019

Чтобы преобразовать Pandas Dataframe в Spark dataframe и наоборот, вам придется использовать pyarrow, который представляет собой столбчатый формат данных в памяти, который используется в Spark для эффективной передачи данных между процессами JVM и Python.

Стрелка доступна в качестве оптимизации при преобразовании Spark DataFrame в Pandas DataFrame с помощью вызова toPandas () и при создании Spark DataFrame из Pandas DataFrame с помощью createDataFrame (pandas_df). Чтобы использовать Arrow при выполнении этих вызовов, пользователям необходимо сначала установить для параметра Spark spark.sql.execution.arrow.enabled значение true. По умолчанию это отключено.

Кроме того, оптимизации, включенные spark.sql.execution.arrow.enabled, могут автоматически вернуться к реализации оптимизации, не связанной со стрелкой, если перед фактическим вычислением в Spark произошла ошибка. Это можно контролировать с помощью spark.sql.execution.arrow.fallback.enabled.

Подробнее см. По этой ссылке Руководство по использованию PySpark для панд с Apache Arrow

import numpy as np
import pandas as pd

# Enable Arrow-based columnar data transfers
spark.conf.set("spark.sql.execution.arrow.enabled", "true")

# Generate a Pandas DataFrame
pdf = pd.DataFrame(np.random.rand(100, 3))

# Create a Spark DataFrame from a Pandas DataFrame using Arrow
df = spark.createDataFrame(pdf)

# Convert the Spark DataFrame back to a Pandas DataFrame using Arrow
result_pdf = df.select("*").toPandas()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...