Чтение большой разделенной таблицы в pyspark вызывает ошибку памяти даже при доступе к одному разделу - PullRequest
1 голос
/ 29 января 2020

У меня возникла следующая проблема, которую я не смог решить.

У меня очень большая (несколько ТБ и около 14.000 разделов) таблица разделов кустов в формате OR C, которую я хотите получить доступ через API PySpark SQL. У меня проблема в том, что при выполнении запроса все разделы получают консультацию , даже когда искра. sql .hive.metastorePartitionPruning имеет значение True .

from pyspark.sql import SparkSession

spark = (
    SparkSession
    .builder
    .appName("TestHiveIntegration")
    .enableHiveSupport()
    .getOrCreate()
)
spark.sql("""
    SELECT col
    FROM table
    WHERE partition_1 = 1
    AND partition_2 = 2
    LIMIT 1
""")

Это прерывается на Java из-за ошибки памяти:

[Stage 0:===================================>              (7072 + 152) / 10000]#
# java.lang.OutOfMemoryError: Java heap space
# -XX:OnOutOfMemoryError="kill -9 %p"
#   Executing /bin/sh -c "kill -9 9755"...

Это , а не проблема разделения раздела, потому что исключение возникает при чтении таблицы, даже когда запрос не выполняется. выполняется:

from pyspark.sql import SparkSession

spark = (
    SparkSession
    .builder
    .appName("TestHiveIntegration")
    .enableHiveSupport()
    .getOrCreate()
)
spark.read.table("table")  # This causes the same error

Кроме того, при чтении таблицы меньшего размера это не проблема, поскольку все разделы можно без проблем просмотреть.

Существует ли способ использовать интеграцию Hive для запроса нужного мне раздела без необходимости Spark просматривать все возможные разделы?


Обновление :

  • Spark и Версии Hive: Hive 2.3.6, Spark 2.4.4.
  • Таблица хранится на S3.
...