我很新于Spark,目前正在使用pyspark和spark-shell进行探索。
这是情况,我使用pyspark和spark-shell运行相同的Spark作业。
这是来自pyspark的输出:
textfile = sc.textFile('/var/log_samples/mini_log_2')
textfile.count()
还有一个来自spark-shell的例子:
textfile = sc.textFile("file:///var/log_samples/mini_log_2")
textfile.count()
我尝试了两种方法,第一个(Python)需要30-35秒才能完成,而第二个(Scala)只需要大约15秒。我很好奇这种不同的性能结果是由什么引起的?是因为语言选择还是因为Spark Shell在后台做了一些Python Spark没有做的事情?
更新:
我对更大的数据集进行了一些测试,总共约550GB(压缩)。我正在使用Spark Standalone作为主节点。
我观察到,在使用PySpark时,任务在执行器之间平均分配。然而,在使用Spark Shell时,任务并不均衡地分配。更强大的机器获得更多的任务,而较弱的机器获得较少的任务。
通过Spark Shell,作业可以在25分钟内完成,而通过PySpark则需要大约55分钟。我该如何让Spark Standalone像在Spark Shell中一样分配任务给PySpark?
图片链接:https://istack.dev59.com/6m3kH.webp 和 https://istack.dev59.com/ANQ0D.webp