Spark优化编码[关闭]

Posted

技术标签:

【中文标题】Spark优化编码[关闭]【英文标题】:Spark optimized coding [closed] 【发布时间】:2021-06-04 15:40:34 【问题描述】:

我是 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 内部的工作方式有关。谁能给我详细的原因?

【问题讨论】:

两个sn-ps的效果应该是一样的。只是风格不同 第二个对更大的数据集不是很快吗? 它们是相同的。试试s_df.explain(),你会看到相同的查询计划。 【参考方案1】:

正如您所描述的那样,这两种“方式”之间没有区别,正如@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 是完全合法的,但您会丢失您以后可能需要的原始数据帧。

【讨论】:

以上是关于Spark优化编码[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

使用 base64 编码图像的优缺点 [关闭]

是否可以将数组元素与没有循环的硬编码初始化列表进行比较? [关闭]

如何检查 Spark 版本 [关闭]

Ephemeral Spark Streaming..以编程方式关闭

为啥 Presto 比 Spark SQL 快 [关闭]

通过 C# 的 Apache Spark 查询 [关闭]