【问题标题】:Finding table size (in MB/GB) in Spark SQL在 Spark SQL 中查找表大小(以 MB/GB 为单位)
【发布时间】:2020-09-30 01:33:59
【问题描述】:

首先,请允许我先说我对Spark-SQL 很陌生。

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

当然,表格行数提供了一个很好的起点,但我希望能够根据bytes/KB/MB/GB/TBs 来估计大小,以了解哪个表将/不适合内存等),这反过来又允许我通过选择最适合该场景的连接类型/策略等来编写更有效的 SQL 查询。

注意:我无权访问 PySpark。我们通过使用 Hive jdbc 驱动程序连接到 Glue 目录的 Sql Workbench 查询 Glue 表。

感谢任何帮助。

谢谢。

【问题讨论】:

    标签: sql apache-spark-sql query-performance aws-glue


    【解决方案1】:

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

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

    【讨论】:

    • 感谢您的回复。我无权访问 PySpark。我们只在 Sql Workbench 中运行 SparkSQL 查询。在工作台中,我们通过 Hive 驱动程序连接的 Glue 目录访问表。
    • 所有这些查询都只是 spark sql 查询。
    • 但是,当我在 sql-workbench 中执行您的语句时,它返回错误:org.apache.spark.sql.AnalysisException: java.lang.IllegalArgumentException: Can not create a Path from an empty string; 和描述语句:No object named extended mytesttable found!
    • 你的 spark sql 可以在那里查询吗?我猜没有
    • 是的。我们通过使用 hive jdbc 连接器的 Sql Workbench 对那些 Glue 目录表运行 spark sql 查询。
    猜你喜欢
    • 2021-10-13
    • 2019-03-16
    • 1970-01-01
    • 2020-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多