如何将rdd的熊猫DataFrame转换为Spark DataFrame

时间:2019-08-08 17:19:00

标签: apache-spark pyspark-sql

我创建了一个熊猫DataFrame的rdd作为中间结果。我想转换一个Spark DataFrame,最终将其保存到镶木地板文件中。

我想知道什么是有效的方法。

谢谢

def create_df(x):
  return pd.DataFrame(np.random.rand(5, 3)).\
           assign(col=x)

sc.parallelize(range(5)).map(create_df).\
          .TO_DATAFRAME()..write.format("parquet").save("parquet_file")

我尝试过pd.concat来将rdd缩小为一个大数据框,似乎不正确。

3 个答案:

答案 0 :(得分:0)

因此,谈到效率,由于spark 2.3将Apache Arrow与Spark集成在一起,因此可以在JVM和Python进程之间高效地传输数据,从而增强从熊猫数据帧到spark数据帧的转换性能。您可以通过

启用它
spark.conf.set("spark.sql.execution.arrow.enabled", "true")

如果您的火花分布中没有集成箭头,则不应抛出错误,只会被忽略。

要在pyspark shell上运行的示例代码如下:

import numpy as np
import pandas as pd
spark.conf.set("spark.sql.execution.arrow.enabled", "true")
pdf = pd.DataFrame(np.random.rand(100, 3))
df = spark.createDataFrame(pdf)
df.write.format("parquet").save('data_parquet_file')

答案 1 :(得分:0)

您的create_df方法返回一个熊猫数据框,然后您可以从中创建spark数据框-不知道为什么需要“ sc.parallelize(range(5))。map(create_df)”

因此您的完整代码可以类似于

import pandas as pd 
import numpy as np 
def create_df(x): 
    return pd.DataFrame(np.random.rand(5, 3)).assign(col=x) 


pdf = create_df(10) 
df = spark.createDataFrame(pdf) 
df.write.format("parquet").save('data_parquet_file')

答案 2 :(得分:0)

import pandas as pd

def create_df(x): 
    df=pd.DataFrame(np.random.rand(5, 3)).assign(col=x)
    return df.values.tolist()


sc.parallelize(range(5)).flatMap(create_df).toDF().\
.write.format("parquet").save("parquet_file")