首先,请允许我先说一下,我是一个很陌生的人。Spark-SQL
.
我正试图了解Spark-Sql中的各种Join类型和策略,我希望能够了解一种方法来估计表的大小(参与Join的表,聚合表等),以便通过了解真实发生的事情来估计调整预期的执行时间,从而帮助我选择最适合该场景的Join策略(在Spark-SQL中通过提示等)。
当然,表的行数提供了一个很好的出发点,但我希望能够估计表的大小,以 bytes
KB
MB
GB
TB
s,以认知哪张表将不适合在内存中等),这反过来将允许我写更有效的SQL查询,通过选择Join类型trategy等,是最适合该方案。
注意:我没有PySpark的权限。我们通过Sql Workbench连接到Glue目录的Hive jdbc驱动来查询Glue表。
任何帮助都是感激的。
谢谢。
看看这是否有助于找到表的大小------。
/**
* 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| |
* +----------+----------------+-------+
*/