如何对pyspark作业进行性能分析

15

我想了解在pyspark代码中的分析性能。

请参考: https://github.com/apache/spark/pull/2351

>>> sc._conf.set("spark.python.profile", "true")
>>> rdd = sc.parallelize(range(100)).map(str)
>>> rdd.count()
100
>>> sc.show_profiles()
============================================================
Profile of RDD<id=1>
============================================================
         284 function calls (276 primitive calls) in 0.001 seconds

   Ordered by: internal time, cumulative time

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
        4    0.000    0.000    0.000    0.000 serializers.py:198(load_stream)
        4    0.000    0.000    0.000    0.000 {reduce}
     12/4    0.000    0.000    0.001    0.000 rdd.py:2092(pipeline_func)
        4    0.000    0.000    0.000    0.000 {cPickle.loads}
        4    0.000    0.000    0.000    0.000 {cPickle.dumps}
      104    0.000    0.000    0.000    0.000 rdd.py:852(<genexpr>)
        8    0.000    0.000    0.000    0.000 serializers.py:461(read_int)
       12    0.000    0.000    0.000    0.000 rdd.py:303(func)

以上方法非常有效。但是如果我像下面这样做:

from pyspark.sql import HiveContext
from pyspark import SparkConf
from pyspark import SparkContext
conf = SparkConf().setAppName("myapp").set("spark.python.profile","true")
sc   = SparkContext(conf=conf)
sqlContext = HiveContext(sc)

df=sqlContext.sql("select * from myhivetable")
df.count()
sc.show_profiles()

这对我没有任何帮助。虽然我得到了计数,但 show_profiles() 却给了我 None

感谢任何帮助

1个回答

8

当使用Spark SQL时,没有Python代码需要进行分析。唯一需要编写的Python代码是调用Scala引擎。其他所有内容都在Java虚拟机上执行。


3
我有一个复杂的Pyspark作业,想要进行性能分析。那么应该怎么做呢?有标准的解决方案吗? - sau
1
你需要分别对JVM代码(例如使用VisualVM)和Python进行分析,但这并不容易。 - user6022341

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