Разрешена ли обрезка разделов для кэшированных TempTables в искры apache? Если да, то как его настроить?Обрезка разделов Spark SQL для кэшированной таблицы
Мои данные - это куча показаний датчиков в разных установках, одна строка содержит имя установки, тег, метку времени и значение.
Я написал данные в формате паркетной с помощью следующих команд:
rdd.toDF("installationName", "tag", "timestamp", "value")
.repartition($"installationName", $"tag")
.write.partitionBy("installationName","tag").mode("overwrite").parquet(config.output)
Я читал эти данные, используя следующую команду в таблицу SQL с помощью искровой HiveContext:
val parquet = hc.read.parquet("/path_to_table/tablename")
parquet.registerTempTable("tablename")
Теперь, если я запустите SQL-запрос в этой таблице, это приведет к обрезке разделов, как ожидалось:
hc.sql("select * from tablename where installationName = 'XXX' and tag = 'YYY'")
И запрос занимает около 8 секунд. Но если я кэшировать в памяти таблицу, а затем выполнить тот же запрос, он всегда занимает около 50 секунд:
hc.sql("CACHE TABLE tablename")
hc.sql("select * from tablename where installationName = 'XXX' and tag = 'YYY'")
Я в настоящее время используется Спарк 1.6.1.
Привет, спасибо за ваш комментарий. Действительно, я делаю операцию перераспределения, прежде чем записывать данные в паркет. Я также тестировал вышеупомянутый запрос с перераспределением, и он более эффективен с временем запроса 20 с, но все же он медленнее, чем чтение из файлов паркета без кеширования. Моя цель - вообще не писать в паркетные файлы. Не могли бы вы предоставить какой-то источник - откуда вы знаете, что обрезка разделов не поддерживается после кеширования? Если вы напишете ответ здесь, я могу принять его. –
Коррекция, кэширование в памяти сокращает время запроса до менее 1 секунды, что, конечно, уже приемлемо. Интересно, масштабируется ли это: это только часть моей дасты, у меня на самом деле более 200 раз больше и постоянно растет, поэтому чем больше данных у меня есть, тем больше времени просматривается во всех разделах, поэтому разделение разделов может показаться полезным здесь , –