apache-spark - Spark分桶读取性能

标签 apache-spark apache-spark-sql apache-spark-dataset apache-spark-2.2

Spark 版本 - 2.2.1。

我创建了一个包含 64 个存储桶的存储表,我正在执行聚合函数 select t1.ifa,count(*) from $tblName t1 where t1.date_ = '2018-01-01' group by ifa 。我可以看到 Spark UI 中的 64 个任务,仅使用 20 个执行程序中的 4 个执行程序(每个执行程序有 16 个核心)。有没有办法可以扩展任务数量,或者这就是分桶查询应该运行的方式(正在运行的核心数量)作为桶的数量)?

这是创建表:

sql("""CREATE TABLE level_1 (
 bundle string,
  date_ date,
 hour SMALLINT)
 USING ORC
 PARTITIONED BY (date_ , hour )
 CLUSTERED BY (ifa)
 SORTED BY (ifa)
 INTO 64 BUCKETS
 LOCATION 'XXX'""")

这是查询:

sql(s"select t1.ifa,count(*) from $tblName t1 where t1.date_ = '2018-01-01' group by ifa").show

最佳答案

使用存储桶时,任务数量 == 存储桶数量,因此您应该了解您需要/想要使用的核心/任务数量,然后将其设置为存储桶数量。

关于apache-spark - Spark分桶读取性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48328709/

相关文章:

scala - Apache Spark : dealing with Option/Some/None in RDDs

python - PySpark - 逐行转换为 JSON

scala - 如何在 Spark SQL 中为自定义类型定义模式?

apache-spark - 我们如何在 Spark 结构化流 2.4.4 中缓存/保留数据集

dataframe - Spark中DataFrame、Dataset、RDD的区别

java - 尝试在 Java 中的 Spark 数据集中添加列时出现空指针异常

python - 保存 Parquet 文件时 _temporary/0 目录上的 FileNotFoundException

scala - Spark HBase连接超时/挂起

java - 如何在 spark 上部署 tensorflow 模型仅进行推理

r - 使用 sparklyr 将列数据类型更改为因子