繁体   English   中英

Apache Spark 不使用来自 Hive 分区外部表的分区信息

[英]Apache Spark not using partition information from Hive partitioned external table

我有一个简单的 Hive-External 表,它是在 S3 之上创建的(文件为 CSV 格式)。 当我运行 hive 查询时,它会显示所有记录和分区。

但是,当我在 Spark 中使用同一个表时(其中 Spark SQL 在分区列上有一个 where 条件),它没有显示应用了分区过滤器。 但是对于 Hive Managed table ,Spark 能够使用分区信息并应用分区过滤器。

是否有任何标志或设置可以帮助我在 Spark 中使用 Hive 外部表的分区? 谢谢。

在此处输入图片说明 在此处输入图片说明

在此处输入图片说明

更新 :

出于某种原因,只有火花计划没有显示分区过滤器。 但是,当您查看加载的数据时,它只会加载分区所需的数据。

例如:其中 rating=0 ,仅加载一个 1 MB 的文件,当我没有过滤器时,它会读取 3 MB 的所有 3 个分区

在此处输入图片说明

在此处输入图片说明

tl; dr 在运行 sql 之前为外部表spark.sql("set spark.sql.hive.convertMetastoreOrc=true")

行为的差异不是因为外部/托管表。
行为取决于两个因素
1. 表的创建位置(Hive 或 Spark)
2.文件格式(我相信在这种情况下是ORC,来自屏幕截图)

创建表的位置(Hive 或 Spark)

如果该表是使用 Spark API 创建的,则将其视为数据源表。
如果该表是使用 HiveQL 创建的,则它被视为 Hive 本机表。
这两个表的元数据都存储在 Hive Metastore 中,唯一的区别在于表的TBLPROPERTIESprovider字段( describe extended <tblName> )。 属性的值为orc或在 Spark 表和hive为空。

spark 如何使用这些信息

当 provider 不是hive (数据源表)时,Spark 使用其原生方式处理数据。
如果 provider 是hive ,Spark 使用 Hive 代码来处理数据。

文件格式

Spark 提供配置标志以指示引擎使用 Datasource 方式处理流动文件格式的数据 = OrcParquet标志:

Orc

  val CONVERT_METASTORE_ORC = buildConf("spark.sql.hive.convertMetastoreOrc")
    .doc("When set to true, the built-in ORC reader and writer are used to process " +
      "ORC tables created by using the HiveQL syntax, instead of Hive serde.")
    .booleanConf
    .createWithDefault(true)

Parquet

val CONVERT_METASTORE_PARQUET = buildConf("spark.sql.hive.convertMetastoreParquet")
    .doc("When set to true, the built-in Parquet reader and writer are used to process " +
      "parquet tables created by using the HiveQL syntax, instead of Hive serde.")
    .booleanConf
    .createWithDefault(true)

我也遇到了这种具有多个内部和外部表连接的问题。

这些技巧都不起作用,包括:

    spark.sql("set spark.sql.hive.convertMetastoreParquet=false")
    spark.sql("set spark.sql.hive.metastorePartitionPruning=true")
    spark.sql("set spark.sql.hive.caseSensitiveInferenceMode=NEVER_INFER")

任何知道如何解决这个问题的人。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM