我有一个带有一些数字列的火花数据框。我想对这些列进行多个汇总操作,为每个函数创建一个新列,其中一些也可以是用户定义的。
简单的解决方案将使用数据框和使用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。它不能与本机处理结合使用。第二个是使用生成的代码本地处理的。
请求结果后的物理计划将转换为阶段并执行。