我创建了一个熊猫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缩小为一个大数据框,似乎不正确。
答案 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")