我有以下问题,我还没能解决。
我有一个非常大(几个tb和大约14.000个分区)的orc格式的hive分区表,我想通过PySparkSQLAPI访问它。我遇到的问题是,在运行查询时,即使spark.sql.hive.metastorepartitionprunning设置为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和hive版本是hive 2.3.6、spark 2.4.4。
表存储在s3上。
暂无答案!
目前还没有任何答案,快来回答吧!