【问题标题】:converting between spark df, parquet object and pandas df在 spark df、parquet object 和 pandas df 之间转换
【发布时间】:2019-10-20 21:57:20
【问题描述】:

我将 parquet 文件转换为 pandas 没有问题,但在将 parquet 转换为 spark df 并将 spark df 转换为 pandas 时遇到了问题。

创建火花会话后,我运行了这些代码

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

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

返回错误

或者,如果使用 parquet 对象 (pd.read_table('summary data.parquet'),我如何将其转换为 spark df?

我需要 spark df 和 pandas df 的原因是,对于一些较小的 DataFrame,我想轻松使用各种 pandas EDA 函数,但对于一些较大的,我需要使用 spark sql。而且先把 parquet 变成 pandas 然后再激发 df 似乎有点绕道。

【问题讨论】:

  • 您的PYSPARK_PYTHON 环境变量是否设置为正确的python 可执行文件并安装了pandas?因为它很简单,就像你有 df = spark.read.parquet("data.parquet") 将镶木地板文件读入 spark dataframe.toPandas() 将 spark df 转换为 pandas df

标签: apache-spark parquet pyarrow


【解决方案1】:

要将 Pandas 数据帧转换为 Spark 数据帧,反之亦然,您必须使用 pyarrow,它是一种内存中的列式数据格式,在 Spark 中用于高效地在 JVM 和 Python 进程之间传输数据。

使用 toPandas() 调用将 Spark DataFrame 转换为 Pandas DataFrame 以及使用 createDataFrame(pandas_df) 从 Pandas DataFrame 创建 Spark DataFrame 时,Arrow 可用作优化。要在执行这些调用时使用 Arrow,用户首先需要将 Spark 配置 spark.sql.execution.arrow.enabled 设置为 true。默认情况下禁用此功能。

此外,如果在 Spark 中的实际计算之前发生错误,由 spark.sql.execution.arrow.enabled 启用的优化可以自动回退到非 Arrow 优化实现。这可以通过 spark.sql.execution.arrow.fallback.enabled 来控制。

更多详情请参考此链接PySpark Usage Guide for Pandas with 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()

【讨论】:

  • 解释有帮助。谢谢。那么有没有办法将已经读入python的parquet对象直接转换为spark DataFrame?
猜你喜欢
  • 2019-06-10
  • 1970-01-01
  • 2018-11-30
  • 2017-05-17
  • 2017-09-13
  • 2020-11-12
  • 2018-08-20
  • 2018-12-25
  • 2018-10-22
相关资源
最近更新 更多