【问题标题】:data distribution in spark dataframes while reading files from s3从 s3 读取文件时 Spark 数据帧中的数据分布
【发布时间】:2022-09-25 23:49:33
【问题描述】:
我正在尝试将 1TB 的 parquet 数据从 s3 读取到 spark 数据帧中,并分配了 80 个具有 30 gb 和 5 个内核的执行程序来处理和 ETL 数据。
但是,我看到数据在执行程序之间分配不均,以便在读取数据时利用内核。我的理解是输入被分成块然后平均分配给执行者进行处理。我没有使用任何类型的洗牌或连接,解释计划也没有任何散列分区或任何类型的聚合。请建议这是否是预期的,以及我们如何更好地重新分配数据以利用所有核心。
标签:
scala
apache-spark
apache-spark-sql
【解决方案1】:
您可以尝试通过设置 spark.sql.files.maxPartitionBytes 来平衡读入更大分区的数据量:
spark.sql.files.maxPartitionBytes
默认值:134217728 (128 MB)
说明:最大
读取文件时打包到单个分区中的字节数。
此配置仅在使用基于文件的源时有效
例如 Parquet、JSON 和 ORC。
从 2.0.0 开始