首页 > 解决方案 > 使用 SparkSession.builder 时如何设置 profiler_cls?

问题描述

我有一个 python 代码库,它使用 pysparkSparkSession.builder创建一个SparkSession. 我正要分析正在运行的 python 代码。

如果我直接调用SparkContext构造函数,我可以传入一个profiler_cls参数。但是,使用生成器,似乎没有办法做到这一点。我错过了什么吗?目前,它默认为BasicProfiler,但我想使用https://pypi.org/project/pyspark-flame/

任何帮助将不胜感激。

代码的精简版本(删除多余的配置设置)是:

SparkSession.builder.master(master).appName(app_name) \
        .config("spark.driver.maxResultSize", "4g") \
        .config("spark.python.profile", "true") \
        .config("spark.python.profile.dump", ".") \
        .getOrCreate()

我正在尝试使用构建器来执行此操作,而不是自己实现该代码。

标签: pythonapache-sparkpysparkprofiling

解决方案


该类Builder有一个未记录的方法_sparkContext,可让您指定会话的火花上下文,因此添加._sparkContext(SparkContext(profiler_cls=...))到您的构建器应该可以工作(尽管我还没有测试过)。

但请注意,pyspark-flame(以及其他使用 pyspark 分析功能的分析器)只能分析在 worker 上运行 Python 代码的 RDD,而 Spark SQL 在 Java 和 Scala 中完成了大部分繁重的工作。根据您的应用程序以及您对 SQL 和数据帧的依赖程度,您可能会或可能不会从中获得有用的数据。


推荐阅读