在Spark SQL中查找表的大小(以MBGB为单位)。

问题描述 投票:0回答:1

首先,请允许我先说一下,我是一个很陌生的人。Spark-SQL.

我正试图了解Spark-Sql中的各种Join类型和策略,我希望能够了解一种方法来估计表的大小(参与Join的表,聚合表等),以便通过了解真实发生的事情来估计调整预期的执行时间,从而帮助我选择最适合该场景的Join策略(在Spark-SQL中通过提示等)。

当然,表的行数提供了一个很好的出发点,但我希望能够估计表的大小,以 bytesKBMBGBTBs,以认知哪张表将不适合在内存中等),这反过来将允许我写更有效的SQL查询,通过选择Join类型trategy等,是最适合该方案。

注意:我没有PySpark的权限。我们通过Sql Workbench连接到Glue目录的Hive jdbc驱动来查询Glue表。

任何帮助都是感激的。

谢谢。

sql apache-spark-sql query-performance
1个回答
0
投票

看看这是否有助于找到表的大小------。

 /**
      * file content
      * spark-test-data.json
      * --------------------
      * {"id":1,"name":"abc1"}
      * {"id":2,"name":"abc2"}
      * {"id":3,"name":"abc3"}
      */
    val fileName = "spark-test-data.json"
    val path = getClass.getResource("/" + fileName).getPath

    spark.catalog.createTable("df", path, "json")
      .show(false)

    /**
      * +---+----+
      * |id |name|
      * +---+----+
      * |1  |abc1|
      * |2  |abc2|
      * |3  |abc3|
      * +---+----+
      */
    // Collect only statistics that do not require scanning the whole table (that is, size in bytes).
    spark.sql("ANALYZE TABLE df COMPUTE STATISTICS NOSCAN")
    spark.sql("DESCRIBE EXTENDED df ").filter(col("col_name") === "Statistics").show(false)

    /**
      * +----------+---------+-------+
      * |col_name  |data_type|comment|
      * +----------+---------+-------+
      * |Statistics|68 bytes |       |
      * +----------+---------+-------+
      */
    spark.sql("ANALYZE TABLE df COMPUTE STATISTICS")
    spark.sql("DESCRIBE EXTENDED df ").filter(col("col_name") === "Statistics").show(false)

    /**
      * +----------+----------------+-------+
      * |col_name  |data_type       |comment|
      * +----------+----------------+-------+
      * |Statistics|68 bytes, 3 rows|       |
      * +----------+----------------+-------+
      */
© www.soinside.com 2019 - 2024. All rights reserved.