caoxuewen created SPARK-23247:
---------------------------------

             Summary: combines Unsafe operations and statistics operations in 
Scan Data Source
                 Key: SPARK-23247
                 URL: https://issues.apache.org/jira/browse/SPARK-23247
             Project: Spark
          Issue Type: Improvement
          Components: SQL
    Affects Versions: 2.3.0
            Reporter: caoxuewen


Currently, we scan the execution plan of the data source, first the unsafe 
operation of each row of data, and then re traverse the data for the count of 
rows. In terms of performance, this is not necessary. this PR combines the two 
operations and makes statistics on the number of rows while performing the 
unsafe operation.

*Before modified,*

{color:#cc7832}val {color}unsafeRow = rdd.mapPartitionsWithIndexInternal { 
(index{color:#cc7832}, {color}iter) =>
 {color:#cc7832}val {color}proj = 
UnsafeProjection.create({color:#9876aa}schema{color})
 proj.initialize(index)
 {color:#FF0000}iter.map(proj){color}
}

{color:#cc7832}val {color}numOutputRows = 
longMetric({color:#6a8759}"numOutputRows"{color})
unsafeRow.map { r =>
 {color:#FF0000}numOutputRows += {color}{color:#6897bb}{color:#FF0000}1{color}
{color} r
}

*After modified,*

    val numOutputRows = longMetric("numOutputRows")

    rdd.mapPartitionsWithIndexInternal { (index, iter) =>
      val proj = UnsafeProjection.create(schema)
      proj.initialize(index)
      iter.map( r => {
{color:#FF0000}        numOutputRows += 1{color}
{color:#FF0000}        proj(r){color}
      })
    }

 



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

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

Reply via email to