Я хочу сравнить время, необходимое для чтения файла для pyspark и scala spark.В Scala я делаю следующее:
import org.apache.spark.sql.SparkSession
object Playground extends App {
def getDfFromFile(path: String, spark: SparkSession) = {
spark
.read
.format("csv")
.option("inferSchema", true)
.option("header", true)
.load(path)
}
val master = "local"
val spark = SparkSession.builder()
.master(master)
.getOrCreate()
spark.sparkContext.setLogLevel("WARN")
val N = 1
val avgTime = (0 until N)
.map(_ => {
val start = System.nanoTime()
getDfFromFile("resources/bigdatafile.csv", spark)
val end = System.nanoTime()
end - start
}).sum / Math.pow(10, 9)
println(avgTime)
}
При N = 1
это занимает около 2,7 секунды.Если я увеличу его до 10, это займет около 3,7 секунды.При N = 100
это занимает 9,7 секунды.
Очевидно, что увеличение времени не является линейным в N. Почему нет?И что я могу сделать, чтобы сделать его линейным, чтобы я мог эффективно сравнить, сколько раз нужно прочитать файл в первый раз в Spark и PySpark?
РЕДАКТИРОВАТЬ:
Если вместо этого я изменю код для создания sparkSession внутри функции map:
val N = 100
val avgTime = (0 until N)
.map(_ => {
val spark = SparkSession.builder()
.master(master)
.getOrCreate()
spark.sparkContext.setLogLevel("WARN")
val start = System.nanoTime()
getDfFromFile("resources/bigdatafile.csv", spark)
val end = System.nanoTime()
spark.close()
end - start
}).sum / Math.pow(10, 9)
это почти не повлияет на результат.