spark sql使用createOrReplaceTempView不是真的计算结果吗?

时间:2018-01-18 12:41:01

标签: apache-spark apache-spark-sql

我的代码是这样的:

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

似乎udf1udf2将被调用3次。 我真正想要的是udf1udf2只计算一次。 希望有些人可以帮助我。

0 个答案:

没有答案