Приветствие
Я создал кластер Spark 2.1.1 в Amazon EC2 с экземпляром типа m4.large, состоящим из 1 главного и 5 подчиненных для запуска. Моя база данных PostgreSQL 9.5 (t2.large) содержит таблицу из более чем 2 миллиардов строк и 7 столбцов, которые я хотел бы обработать. Я следовал указаниям веб-сайта Apache Spark и других источников о том, как подключать и обрабатывать эти данные.
Моя проблема в том, что производительность Spark SQL намного ниже, чем в моей базе данных. Мой SQL-оператор (см. Ниже в коде) занимает около 21 минуты в PSQL, но Spark SQL занимает около 42 минут, чтобы закончить. Моя главная цель - измерить производительность PSQL против Spark SQL, и пока я не получаю желаемых результатов. Буду признателен за помощь.
Спасибо
Я пытался увеличить fetchSize с 10000 до 100000, кэшировать фрейм данных, увеличить числовое разделение до 100, установить spark.sql.shuffle до 2000, удвоить размер моего кластера и использовать больший тип экземпляра, и пока я не видел никаких улучшений .
val spark = SparkSession.builder()
.appName("Spark SQL")
.getOrCreate();
val jdbcDF = spark.read.format("jdbc")
.option("url", DBI_URL)
.option("driver", "org.postgresql.Driver")
.option("dbtable", "ghcn_all")
.option("fetchsize", 10000)
.load()
.createOrReplaceTempView("ghcn_all");
val sqlStatement = "SELECT ghcn_date, element_value/10.0
FROM ghcn_all
WHERE station_id = 'USW00094846'
AND (ghcn_date >= '2015-01-01' AND ghcn_date <= '2015-12-31')
AND qflag IS NULL
AND element_type = 'PRCP'
ORDER BY ghcn_date";
val sqlDF = spark.sql(sqlStatement);
var start:Long = System.nanoTime;
val num_rows:Long = sqlDF.count();
var end:Long = System.nanoTime;
println("Total Row : " + num_rows);
println("Total Collect Time Lapse : " + ((end - start) / 1000000) + " ms");