我将镶木地板文件转换为大熊猫没有问题,但是在将镶木地板转换为spark df和将spark df转换为熊猫时遇到了问题。
创建Spark会话后,我运行了这些代码
spark_df = spark.read.parquet('summarydata.parquet')
spark_df.select('*')。toPandas()
或者,使用镶木地板对象(pd.read_table('summary data.parquet'),如何将其转换为spark df?
我同时需要spark df和pandas df的原因是,对于一些较小的DataFrame,我想轻松地使用各种pandas EDA函数,但是对于一些较大的我需要使用spark sql。先将镶木地板变成大熊猫然后再引发df似乎有点绕路。
答案 0 :(得分:1)
要将Pandas数据框转换为Spark数据框,反之亦然,您必须使用pyarrow,这是一种内存列数据格式,在Spark中使用,可以在JVM和Python进程之间高效地传输数据。
当使用对toPandas()的调用将Spark DataFrame转换为Pandas DataFrame以及使用createDataFrame(pandas_df)从Pandas DataFrame创建Spark DataFrame时,可以将箭头作为一种优化。要在执行这些调用时使用Arrow,用户需要首先将Spark配置spark.sql.execution.arrow.enabled设置为true。默认情况下,此功能是禁用的。
此外,如果在Spark内部实际计算之前发生错误,则spark.sql.execution.arrow.enabled启用的优化可能会自动回退到非箭头优化实现。可以通过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()