Github user tengpeng commented on a diff in the pull request:

    https://github.com/apache/spark/pull/20933#discussion_r198456106
  
    --- Diff: 
sql/core/src/main/scala/org/apache/spark/sql/execution/datasources/FilePartitionUtil.scala
 ---
    @@ -0,0 +1,225 @@
    +/*
    + * Licensed to the Apache Software Foundation (ASF) under one or more
    + * contributor license agreements.  See the NOTICE file distributed with
    + * this work for additional information regarding copyright ownership.
    + * The ASF licenses this file to You under the Apache License, Version 2.0
    + * (the "License"); you may not use this file except in compliance with
    + * the License.  You may obtain a copy of the License at
    + *
    + *    http://www.apache.org/licenses/LICENSE-2.0
    + *
    + * Unless required by applicable law or agreed to in writing, software
    + * distributed under the License is distributed on an "AS IS" BASIS,
    + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    + * See the License for the specific language governing permissions and
    + * limitations under the License.
    + */
    +package org.apache.spark.sql.execution.datasources
    +
    +import java.io.{FileNotFoundException, IOException}
    +
    +import scala.collection.mutable
    +import scala.collection.mutable.ArrayBuffer
    +
    +import org.apache.spark.TaskContext
    +import org.apache.spark.deploy.SparkHadoopUtil
    +import org.apache.spark.internal.Logging
    +import org.apache.spark.rdd.InputFileBlockHolder
    +import org.apache.spark.sql.SparkSession
    +import org.apache.spark.sql.catalyst.InternalRow
    +import org.apache.spark.sql.vectorized.ColumnarBatch
    +import org.apache.spark.util.NextIterator
    +
    +object FilePartitionUtil extends Logging {
    +
    +  def getFilePartitions(
    +      sparkSession: SparkSession,
    +      partitionedFiles: Seq[PartitionedFile],
    +      maxSplitBytes: Long): Seq[FilePartition] = {
    +    val partitions = new ArrayBuffer[FilePartition]
    +    val currentFiles = new ArrayBuffer[PartitionedFile]
    +    var currentSize = 0L
    +
    +    /** Close the current partition and move to the next. */
    +    def closePartition(): Unit = {
    +      if (currentFiles.nonEmpty) {
    +        val newPartition =
    +          FilePartition(
    +            partitions.size,
    +            currentFiles.toArray.toSeq) // Copy to a new Array.
    +        partitions += newPartition
    +      }
    +      currentFiles.clear()
    +      currentSize = 0
    +    }
    +
    +    val openCostInBytes = 
sparkSession.sessionState.conf.filesOpenCostInBytes
    +    // Assign files to partitions using "Next Fit Decreasing"
    +    partitionedFiles.foreach { file =>
    +      if (currentSize + file.length > maxSplitBytes) {
    +        closePartition()
    +      }
    +      // Add the given file to the current partition.
    +      currentSize += file.length + openCostInBytes
    +      currentFiles += file
    +    }
    +    closePartition()
    +    partitions
    +  }
    +
    +  def compute(
    --- End diff --
    
    Reasonable concern. Is it because the author followed the convention in RDD 
in which `compute` is used?


---

---------------------------------------------------------------------
To unsubscribe, e-mail: reviews-unsubscr...@spark.apache.org
For additional commands, e-mail: reviews-h...@spark.apache.org

Reply via email to