我的代码是这样的:
dataFrame.createOrReplaceTempView("tableName1")
//udf1 and udf2 will return a struct
var dataFrame1 = sql("select udf1(a) as col1,udf2(a) as col2 from tableName1");
dataFrame1.createOrReplaceTempView("tableName2")
var dataFrame2 = sql("select col1.x,col1.y,col1.z,col2.x,col2.y,col2.z from tableName2");
dataFrame2.write.parquet("path")
我看到Spark UI中的物理计划是这样的:
select udf1(a).x,udf1(a).y,udf1(a).z,udf2.x,udf2.y,udf2.z from tableName2
似乎udf1
和udf2
将被调用3次。
我真正想要的是udf1
和udf2
只计算一次。
希望有些人可以帮助我。