Выигрывает ли Spark от `sortBy` в постоянной таблице?

#apache-spark #pyspark #apache-spark-sql #pyspark-sql

#apache-spark #pyspark #apache-spark-sql

Вопрос:

В Spark версии v2.4 нет улья

Spark извлекает выгоду из bucketBy того, что он знает, что фрейм данных имеет правильное разделение. Как насчет sortBy ?

 spark.range(100, numPartitions=1).write.bucketBy(3, 'id').sortBy('id').saveAsTable('df')

# No need to `repartition`.
spark.table('df').repartition(3, 'id').explain()
# == Physical Plan ==
# *(1) FileScan parquet default.df2[id#33620L] Batched: true, Format: Parquet, Location: InMemoryFileIndex[df], PartitionFilters: [], PushedFilters: [], ReadSchema: struct<id:bigint>, # SelectedBucketsCount: 3 out of 3

# Still need to `sortWithinPartitions`.
spark.table('df').sortWithinPartitions('id').explain()
# == Physical Plan ==
# *(1) Sort [id#33620L ASC NULLS FIRST], false, 0
#  - *(1) FileScan parquet default.df2[id#33620L] Batched: true, Format: Parquet, Location: InMemoryFileIndex[df], PartitionFilters: [], PushedFilters: [], ReadSchema: struct<id:bigint>, SelectedBucketsCount: 3 out of 3
  

Таким образом, дополнительные repartition опущены. Однако, sortWithinPartitions это не так. sortBy Полезно? Можем ли мы использовать sortBy для ускорения объединения таблиц вообще?

Ответ №1:

Краткий ответ: В постоянных таблицах нет никаких преимуществ sortBy (по крайней мере, на данный момент).

Более длинный ответ :

Spark и Hive не реализуют одинаковую семантику или операционные спецификации, когда дело доходит до поддержки группирования, хотя Spark может сохранять объединенный фрейм данных в таблицу Hive.

Во-первых, единицы группирования различаются в обеих платформах: один файл корзины (hive) или коллекция файлов на корзину (spark).

Второй,

В Hive каждый сегмент отсортирован глобально, что может оптимизировать запросы, считывающие данные.

В Spark и до этой проблемы https://issues.apache.org/jira/browse/SPARK-19256 (надеюсь) решается, каждый файл сортируется индивидуально, но корзина в целом глобально не сортируется.

Таким образом, поскольку сортировка не является глобальной, в ней нет формы преимуществ sortBy .

Я надеюсь, что это отвечает на ваш вопрос.