Pyspark 火花优化编码

Pyspark 火花优化编码,pyspark,bigdata,Pyspark,Bigdata,我是Pypark的新手。以以下方式编写代码: 1st way: s_df= s_df.withColumn('sum', s_df['Col1'] + s_df['Col2'] ) s_df= s_df.withColumn('difference', s_df['Col1'] - s_df['Col2'] ) 2nd way: s_df= ( s_df.withColumn('sum', s_df['Col1'] + s_df['Col2'])

我是Pypark的新手。以以下方式编写代码:

1st way:
    s_df= s_df.withColumn('sum', s_df['Col1'] + s_df['Col2'] )
    s_df= s_df.withColumn('difference', s_df['Col1'] - s_df['Col2'] )

2nd way:
    s_df= ( s_df.withColumn('sum', s_df['Col1'] + s_df['Col2'])
                .withColumn('difference', s_df['Col1'] - s_df['Col2']) )

建议使用第二个,这与spark内部的工作方式有关。有人能给我一个详细的原因吗?

正如@mck指出的那样,你所描述的这两种“方式”没有区别,
s_df.explain()
对于这两种情况都是一样的

我认为没有一种官方的或“可取的”方式来编写代码,因为Spark在其文档中没有提供任何样式指南。然而,我发现用这种方式编写它更容易(可读性和可维护性更强)

s_-df=(s_-df
.带列('sum',s_-df['Col1']+s_-df['Col2']))
.withColumn('difference',s_-df['Col1']-s_-df['Col2']))
)

另外,值得一提的是,尽管覆盖
s_df
是完全合法的,但您将丢失您以后可能需要的原始数据帧。

这两个片段的效果应该是相同的。这只是样式上的不同。第二种方法对更大的数据集不是很有效吗?它们是相同的。尝试执行
s_df.explain()
,您将看到相同的查询计划。