Python与Scala(用于Spark作业)

9

我很新于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
1个回答

1

使用Python会有一些开销,但它的重要性取决于你在做什么。 尽管最近的报告表明开销并不是很大(特别是对于新的DataFrame API

你遇到的一些开销与每个作业的常量开销有关-对于大型作业几乎无关紧要。 你应该使用更大的数据集进行样本基准测试,并查看开销是否是恒定增加还是与数据大小成比例。

另一个潜在的瓶颈是应用于每个元素的Python函数的操作(map等)-如果这些操作对你有影响,则应该进行测试。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接