Я паркетные данные разделены 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
с помощью искры, но когда я пытаюсь запрос, он сканирует все каталоги для нижнего колонтитула и что замедляет первоначальный запрос, даже если я запрашиваю только данные за один день.
запрос: 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 (но старый)
Log:
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
, а также указана схема для чтения как, поэтому она может просто перейти к разделу, на который я смотрю, почему он должен быть загружен во все листовые файлы? Листинг листьев файлы с 2-исполнителях займет 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()
Связано: [Поддерживает ли Spark подрезку раздела с помощью паркетных файлов] (http://stackoverflow.com/q/37180073/1560062) – zero323
Я вообще не использую куст. Просто искра и искра sql –
@lostinoverflow Я до сих пор не нашел, почему мы читаем рекурсивно, но я могу сбить 10 минут первоначального сканирования на 1 мин сканирования. Эффективное сокращение запроса до менее 2 минут –