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优化编码[关闭]的主要内容,如果未能解决你的问题,请参考以下文章
是否可以将数组元素与没有循环的硬编码初始化列表进行比较? [关闭]