python - 使用 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()
我正在尝试使用构建器来执行此操作,而不是自己实现该代码。
解决方案
该类Builder
有一个未记录的方法_sparkContext
,可让您指定会话的火花上下文,因此添加._sparkContext(SparkContext(profiler_cls=...))
到您的构建器应该可以工作(尽管我还没有测试过)。
但请注意,pyspark-flame(以及其他使用 pyspark 分析功能的分析器)只能分析在 worker 上运行 Python 代码的 RDD,而 Spark SQL 在 Java 和 Scala 中完成了大部分繁重的工作。根据您的应用程序以及您对 SQL 和数据帧的依赖程度,您可能会或可能不会从中获得有用的数据。
推荐阅读
- javascript - 示例代码,错误:应为“;” 但发现“类”和更多语法错误
- firebase - InvalidUrlError:无法识别的方案“gs”
- python-asyncio - 使用 asyncio.Queue() 时如何取消获取?
- javascript - 从比较中列出清单
- javascript - DiscordJS:检查输入是否在字符串中
- php - MySQLi 已启用但未在 Windows Server 2008 中加载
- node.js - 如何在 node.js 中的一台服务器上运行多个多人游戏(服务器)
- python - list1 在我的代码中的任何地方都不会被分配等于 list2,但是 list1 的值仍然被复制到 list2
- android - 当只有一个建议时,AutoCompleteTextView 建议隐藏在键盘下
- javascript - 更新 async forEach 以根据来自另一个集合的属性更新每个文档属性