#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
.
Я надеюсь, что это отвечает на ваш вопрос.