[ 
https://issues.apache.org/jira/browse/SPARK-11990?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15027614#comment-15027614
 ] 

Rekha Joshi commented on SPARK-11990:
-------------------------------------

Hi [~tianyi],
I am on Spark 1.6.0-SNAPSHOT and get below on optimized logical plan.Please 
confirm this is what you see and that it needs to be more  optimized for 
heavier UDF's?Thanks.

{panel:title=DataFrame plan for UDF}
== Parsed Logical Plan ==
'Project [*,arr#2[1] AS e1#4]
 Project [a#1,arr#2,arr#2[0] AS e0#3]
  Project [a#1,UDF(a#1) AS arr#2]
   Project [_1#0 AS a#1]
    LogicalRDD [_1#0], MapPartitionsRDD[1] at stringRddToDataFrameHolder at 
<console>:27

== Analyzed Logical Plan ==
a: string, arr: array<string>, e0: string, e1: string
Project [a#1,arr#2,e0#3,arr#2[1] AS e1#4]
 Project [a#1,arr#2,arr#2[0] AS e0#3]
  Project [a#1,UDF(a#1) AS arr#2]
   Project [_1#0 AS a#1]
    LogicalRDD [_1#0], MapPartitionsRDD[1] at stringRddToDataFrameHolder at 
<console>:27

== Optimized Logical Plan ==
Project [_1#0 AS a#1,UDF(_1#0) AS arr#2,UDF(_1#0)[0] AS e0#3,UDF(_1#0)[1] AS 
e1#4]
 LogicalRDD [_1#0], MapPartitionsRDD[1] at stringRddToDataFrameHolder at 
<console>:27

== Physical Plan ==
Project [_1#0 AS a#1,UDF(_1#0) AS arr#2,UDF(_1#0)[0] AS e0#3,UDF(_1#0)[1] AS 
e1#4]
 Scan PhysicalRDD[_1#0]
{panel}

> DataFrame recompute UDF in some situation.
> ------------------------------------------
>
>                 Key: SPARK-11990
>                 URL: https://issues.apache.org/jira/browse/SPARK-11990
>             Project: Spark
>          Issue Type: Bug
>          Components: SQL
>    Affects Versions: 1.5.1
>            Reporter: Yi Tian
>
> Here is codes for reproducing this problem:
> {code}
>   val mkArrayUDF = org.apache.spark.sql.functions.udf[Array[String],String] 
> ((s: String) => {
>     println("udf called")
>     Array[String](s+"_part1", s+"_part2")
>   })
>   
>   val df = sc.parallelize(Seq(("a"))).toDF("a")
>   val df2 = df.withColumn("arr",mkArrayUDF(df("a")))
>   val df3 = df2.withColumn("e0", df2("arr")(0)).withColumn("e1", 
> df2("arr")(1))
>   df3.collect().foreach(println)
> {code}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to