使用SparkSession.builder时如何设置profiler_cls?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用SparkSession.builder时如何设置profiler_cls?相关的知识,希望对你有一定的参考价值。

我有一个python代码库,使用pyspark的SparkSession.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()

我正在尝试使用构建器而不是自己实现该代码。

答案

Builder类有一个未记录的方法_sparkContext,它允许您指定会话的spark上下文,因此将._sparkContext(SparkContext(profiler_cls=...))添加到您的构建器应该可以工作(虽然我没有测试过它)。

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

以上是关于使用SparkSession.builder时如何设置profiler_cls?的主要内容,如果未能解决你的问题,请参考以下文章

SparkSession使用[error]日志记录到控制台

sparkSparkSession的API

spark 源码分析之二 -- SparkContext 的初始化过程

使用 spark 读取 csv.file 时如何省略标头?

SparkSession 和上下文混淆

Spark SQL中的DataFrame的创建