在spark sql中查找表大小(mb/gb)

pgx2nnw8  于 2021-07-29  发布在  Java
关注(0)|答案(1)|浏览(514)

首先,请允许我首先说,我是一个新来的 Spark-SQL .
我试图了解sparksql中的各种连接类型和策略,我希望能够了解一种近似表大小的方法(参与连接的表,聚合等),以便通过了解引擎盖下实际发生的事情来估计/调整预期的执行时间,以帮助我选择最适合该场景的连接策略(在sparksql中通过提示等)。
当然,表行计数提供了一个很好的起点,但是我希望能够根据 bytes / KB / MB / GB / TB s、 要知道哪个表适合/不适合内存等),这将允许我通过选择最适合该场景的连接类型/策略等来编写更高效的sql查询。
注意:我没有权限访问pyspark。我们通过连接到带有hivejdbc驱动程序的glue目录的sqlworkbench查询glue表。
感谢您的帮助。
谢谢。

osh3o9ms

osh3o9ms1#

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

/**
      * 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|       |
      * +----------+----------------+-------+
      */

相关问题