Spark 优化编码

Spark optimized coding

我是 pyspark 的新手。代码的编写方式有以下几种:

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
  .withColumn('sum', s_df['Col1'] + s_df['Col2'])
  .withColumn('difference', s_df['Col1'] - s_df['Col2'])
)

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