我正在使用“start_pyspark_shell”命令启动我的 spark shell,并将 cli 选项提供为 - 4 个执行程序,每个执行程序 2 个内核和 4GB 内存用于工作节点和 4GB 用于主节点
存储:HDFS
输入文件:压缩的 .csv.gz 文件,大小为 221.3 MB(HDFS 上有 2 个块)和
Spart 版本:2.4.0
手头的任务是计算文件中记录数的简单任务。唯一的问题是它是一个压缩文件。我使用加载文件
df = spark.read.format("com.databricks.spark.csv").load(hdfs_path)
当我这样做时df.count()
,我看到有一个执行程序任务并且可能是预期的(?),因为我正在处理一个不可拆分的压缩文件并且将使用单个分区进行操作?
我检查了分区的数量——df.rdd.getNumPartitions()
它返回了 1,可能与预期的一样。
多次运行同一命令的处理时间约为 15-17 秒。
我想我们可以在这里得出结论,上述处理没有太多的并行性?
我现在尝试df.repartition(10).count()
期望数据将被重新分区到 10 个新分区中,并且可能跨工作节点。我可以看到 TASKS 的数量现在取决于我指定的分区数量。我希望在执行时间方面有一些改进的性能。原来是25-26秒。
当我使用.repartition(20)
时,它运行了 4 多分钟,我不得不杀死它。
性能降低。我是不是做错了什么,或者我错过了提高性能的任何步骤?
注意:我确实看到了一些很好的现有帖子,但仍然不清楚。因此发布一个新的查询。