首页 > 解决方案 > pyspark 数据帧中的顺序操作

问题描述

我有一个关于处理数据框(df)转换的最佳方法的问题。假设我有一个主 df,我需要将这个 df 与其他 3 个 df 加入。下面哪一个是实现这一目标的最佳方式(更好的性能)?创建多个 dfs 或重新分配给现有的一个?

1 - 每个步骤一个数据框

df = spark.read.orc(file)
df2 = spark.read.orc(file2)
df3 = spark.read.orc(file3)
df4 = spark.read.orc(file4)

df5 = df.join(df2, df.col==df2.col, 'inner')
df6 = df5.join(df3, df5.col==df3.col, 'inner')
df7 = df6.join(df4, df6.col==df4.col, 'inner')

df7.write.orc(file)

2 - 重新分配给现有的

df = spark.read.orc(file)
df2 = spark.read.orc(file2)
df3 = spark.read.orc(file3)
df4 = spark.read.orc(file4)

df = df.join(df2, df.col==df2.col, 'inner')
df = df.join(df3, df.col==df3.col, 'inner')
df = df.join(df4, df.col==df4.col, 'inner')

df.write.orc(file)

标签: apache-sparkpyspark

解决方案


第二个。Spark 的 DAG 足够智能,可以检测连接。

更好的是,在第二种方法中df,您可以这样做,而不是多次分配:

df = df.join(df2, df.col==df2.col, 'inner')
    .join(df3, df.col==df3.col, 'inner')
    .join(df4, df.col==df4.col, 'inner')

推荐阅读