如何在火花中的同一条线上赚取不同的总和



我有一个带有一些数字列的火花数据框。我想对这些列进行多个汇总操作,为每个函数创建一个新列,其中一些也可以是用户定义的。

简单的解决方案将使用数据框和使用column。对于ISTANCE,如果我想计算均值(手工)和函数my_function fields field_1和field_2我会做:

df=df.withColumn("mean",(df["field_1"]+df["field_2])/2)
df=df.withColumn("foo", my_function(df["field_1"],df["field_2]))

我的疑问是关于效率。以上2个功能扫描整个数据库,而智能方法将使用一次扫描来计算两个结果。

关于如何做的暗示?

谢谢

Mauro

tl; dr 您正在尝试解决不存在的问题

SQL转换是懒惰和声明性的。一系列操作将转换为逻辑执行计划,然后转换为物理执行计划。在第一阶段,Spark Optimizer可以自由重新订购,组合甚至删除计划的任何部分。但是,您必须区分两种情况:

  • Python udf
  • SQL表达式。

第一个需要单独转换为Python RDD。它不能与本机处理结合使用。第二个是使用生成的代码本地处理的。

请求结果后的物理计划将转换为阶段并执行。

相关内容

  • 没有找到相关文章