У меня есть два сценария, в которых я 23 GB
разделил parquet
данные и читаю несколько columns
& caching
их заранее, чтобы впоследствии запустить серию последующих запросов.
Настройка:
- Кластер: 12 узлов ЭМИ
- Версия Spark: 1.6
- Конфигурации Spark: по умолчанию
- Конфигурации запуска: одинаковые для обоих случаев
Случай 1:
val paths = Array("s3://my/parquet/path", ...)
val parqFile = sqlContext.read.parquet(paths:_*)
parqFile.registerTempTable("productViewBase")
val dfMain = sqlContext.sql("select guid,email,eventKey,timestamp,pogId from productViewBase")
dfMain.cache.count
С SparkUI
считанные входные данные составляют 6,2 ГБ, а размер кэшированного объекта - 15,1 ГБ.
Случай 1:
val paths = Array("s3://my/parquet/path", ...)
val parqFile = sqlContext.read.parquet(paths:_*)
parqFile.registerTempTable("productViewBase")
val dfMain = sqlContext.sql("select guid,email,eventKey,timestamp,pogId from productViewBase order by pogId")
dfMain.cache.count
Начиная с SparkUI
объем считываемых входных данных составляет 6,2 ГБ, а размер кэшированного объекта - 5,5 ГБ.
Любое объяснение или ссылка на код этого поведения?