我对Spark很新,目前通过玩pyspark和spark-shell来探索它。
所以情况就是这样,我用pyspark和spark-shell运行相同的火花作业。
这是来自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秒。我对可能导致这种不同性能结果的原因感到好奇吗?是因为语言的选择还是火花贝壳在背景中做了什么事情?
更新
所以我对较大的数据集进行了一些测试,总共约550 GB(压缩)。我使用Spark Standalone作为主人。
我观察到在使用pyspark时,任务在执行者之间平均分配。但是,在使用spark-shell时,任务不会平等分配。更强大的机器可以获得更多任务,而较弱的机器可以减少任务。
使用spark-shell,工作在25分钟内完成,而pyspark则在55分钟左右完成。如何使用pyspark使Spark Standalone分配任务,因为它使用spark-shell分配任务?
答案 0 :(得分:1)
使用python有一些开销,但它的重要性取决于你正在做什么。 虽然最近的报告表明开销并不是很大(specifically for the new DataFrame API)
您遇到的一些开销与每个工作开销的持续性有关 - 这对于大型工作几乎无关紧要。 您应该使用更大的数据集进行样本基准测试,并查看开销是否是一个恒定的加法,或者它是否与数据大小成比例。
另一个潜在的瓶颈是对每个元素应用python函数的操作(地图等) - 如果这些操作与你相关,你也应该测试它们。