У меня есть паркетные данные, разделенные по date
и hour
, структуре папок:
events_v3
-- event_date=2015-01-01
-- event_hour=2015-01-1
-- part10000.parquet.gz
-- event_date=2015-01-02
-- event_hour=5
-- part10000.parquet.gz
Я создал таблицу raw_events
помощью spark, но когда я пытаюсь выполнить запрос, он сканирует все каталоги для нижнего колонтитула, и это замедляет первоначальный запрос, даже если я запрашиваю данные только за один день.
запрос: select * from raw_events where event_date='2016-01-01'
похожая проблема: http://mail-archives.apache.org/mod_mbox/spark-user/201508.mbox/%[email protected].com%3E (но старый)
Журнал:
App > 16/09/15 03:14:03 main INFO HadoopFsRelation: Listing leaf files and directories in parallel under: s3a://bucket/events_v3/
и затем он порождает 350 задач, так как данные за 350 дней.
Я отключил schemaMerge
, а также определил схему для чтения, так что она может просто перейти к разделу, который я просматриваю, зачем печатать все листовые файлы? Листинг листовых файлов с двумя исполнителями занимает 10 минут, а фактическое выполнение запроса занимает 20 секунд
Пример кода:
val sparkSession = org.apache.spark.sql.SparkSession.builder.getOrCreate()
val df = sparkSession.read.option("mergeSchema","false").format("parquet").load("s3a://bucket/events_v3")
df.createOrReplaceTempView("temp_events")
sparkSession.sql(
"""
|select verb,count(*) from temp_events where event_date = "2016-01-01" group by verb
""".stripMargin).show()