在将数据帧缓存为临时视图('createOrReplaceTempView')时执行Spark 2.3回归(vs 1.6)

时间:2018-12-31 11:57:57

标签: scala apache-spark apache-spark-sql apache-spark-2.0

似乎在缓存数据帧并将其保存为临时表时,行为在1.6和2.3之间发生了变化。在1.6中,以下代码一次执行printUDF。 2.3中的等效代码(甚至相同)执行两次。

val rdd = context.parallelize(Seq(1, 2, 3)).map(Row(_))
val schema = StructType(StructField("num", IntegerType) :: Nil)

val df1 = sql.createDataFrame(rdd, schema)
df1.registerTempTable("data_table")

sql.udf.register("printUDF", (x:Int) => {print(x)
  x
 })

val df2 = sql.sql("select printUDF(num) result from data_table").cache()

df2.collect() //execute cache

df2.registerTempTable("cached_table")

val df3 = sql.sql("select result from cached_table")

df3.collect()

1.6打印123,而2.3打印123123,因此两次评估数据帧。

设法跳过临时表并直接从缓存的数据帧中进行选择来克服,但是想知道这是否是预期的行为/已知问题。

更新:根据https://issues.apache.org/jira/browse/SPARK-26510,这似乎是一个错误。

0 个答案:

没有答案
相关问题