У меня возникла следующая проблема, которую я не смог решить.
У меня очень большая (несколько ТБ и около 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.