- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有三个文件:
user()
方法来读取/etc/user,user()
方法来获取用户是谁。我的环境中没有/etc/user
,所以我需要模拟方法user()
来伪造它。但是,单元测试 test_env_without_spark
有效,但 test_env_with_spark
无效。看起来模拟只适用于驱动程序节点,我不能模拟所有工作节点(进程)上的类或方法。请参阅我的代码和下面的错误。
有没有人知道如何在所有工作节点(进程)上模拟方法?
spark_mock_dependency.py
def user():
with open('/etc/user') as f:
return f.readline().strip()
spark_mock.py
from pkgname.spark_mock_dependency import user
class Env:
user = user()
spark_mock_test.py
import unittest
from unittest.mock import patch
from pyspark import SparkConf, SparkContext
class EnvTest(unittest.TestCase):
sc = None
@classmethod
def setUpClass(cls) -> None:
conf = SparkConf().setMaster("local[2]").setAppName("testing")
cls.sc = SparkContext(conf=conf)
@patch('pkgname.spark_mock_dependency.user')
def test_env_with_spark(self, user_mocker):
user_mocker.return_value = 'anyone'
from pkgname.spark_mock import Env
rdd = self.__class__.sc.parallelize([1, 2])
results = rdd.map(lambda: f'{Env.user}').collect()
self.assertTrue([res == 'anyone' for res in results])
@patch('pkgname.spark_mock_dependency.hb_user')
def test_env_without_spark(self, user_mocker):
user_mocker.return_value = 'anyone'
from pkgname.spark_mock import Env
self.assertEqual('anyone', Env.user)
错误信息
py4j.protocol.Py4JJavaError: An error occurred while calling
z:org.apache.spark.api.python.PythonRDD.collectAndServe.
: org.apache.spark.SparkException: Job aborted due to stage failure: Task 0 in stage 0.0 failed 1 times, most recent failure: Lost task 0.0 in stage 0.0 (TID 0) (executor driver): org.apache.spark.api.python.PythonException: Traceback (most recent call last):
"lib/python3.6/site-packages/pyspark/python/lib/pyspark.zip/pyspark/worker.py", line 586, in main
func, profiler, deserializer, serializer = read_command(pickleSer, infile)
"lib/python3.6/site-packages/pyspark/python/lib/pyspark.zip/pyspark/worker.py", line 69, in read_command
command = serializer._read_with_length(file)
"lib/python3.6/site-packages/pyspark/python/lib/pyspark.zip/pyspark/serializers.py", line 160, in _read_with_length
return self.loads(obj)
"lib/python3.6/site-packages/pyspark/python/lib/pyspark.zip/pyspark/serializers.py", line 430, in loads
return pickle.loads(obj, encoding=encoding)
"lib/python3.6/site-packages/pkgname/spark_mock.py", line 4, in <module>
class Env:
"lib/python3.6/site-packages/pkgname/spark_mock.py", line 5, in Env
user = user()
"lib/python3.6/site-packages/pkgname/spark_mock_dependency.py", line 2, in hb_user
with open('/etc/user') as f:
FileNotFoundError: [Errno 2] No such file or directory: '/etc/user'
最佳答案
您可以在单元测试中导入用户包并模拟该包本身
检查下面的代码:
def test_env_with_spark(self, user_mocker):
from pkgname.spark_mock import Env, user
user_mocker.patch("pkgname.spark_mock.user", return_value='anyone')
rdd = self.__class__.sc.parallelize([1, 2])
results = rdd.map(lambda: f'{Env.user}').collect()
关于python - 如何使单元测试模拟代码对每个 spark worker 节点(进程)生效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67207586/
我尝试理解[c代码 -> 汇编]代码 void node::Check( data & _data1, vector& _data2) { -> push ebp -> mov ebp,esp ->
我需要在当前表单(代码)的上下文中运行文本文件中的代码。其中一项要求是让代码创建新控件并将其添加到当前窗体。 例如,在Form1.cs中: using System.Windows.Forms; ..
我有此 C++ 代码并将其转换为 C# (.net Framework 4) 代码。有没有人给我一些关于 malloc、free 和 sprintf 方法的提示? int monate = ee; d
我的网络服务器代码有问题 #include #include #include #include #include #include #include int
给定以下 html 代码,将列表中的第三个元素(即“美丽”一词)以斜体显示的 CSS 代码是什么?当然,我可以给这个元素一个 id 或一个 class,但 html 代码必须保持不变。谢谢
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 7 年前。
我试图制作一个宏来避免重复代码和注释。 我试过这个: #define GrowOnPage(any Page, any Component) Component.Width := Page.Surfa
我正在尝试将我的旧 C++ 代码“翻译”成头条新闻所暗示的 C# 代码。问题是我是 C# 中的新手,并不是所有的东西都像 C++ 中那样。在 C++ 中这些解决方案运行良好,但在 C# 中只是不能。我
在 Windows 10 上工作,R 语言的格式化程序似乎没有在 Visual Studio Code 中完成它的工作。我试过R support for Visual Studio Code和 R-T
我正在处理一些报告(计数),我必须获取不同参数的计数。非常简单但乏味。 一个参数的示例查询: qCountsEmployee = ( "select count(*) from %s wher
最近几天我尝试从 d00m 调试网络错误。我开始用尽想法/线索,我希望其他 SO 用户拥有可能有用的宝贵经验。我希望能够提供所有相关信息,但我个人无法控制服务器环境。 整个事情始于用户注意到我们应用程
我有一个 app.js 文件,其中包含如下 dojo amd 模式代码: require(["dojo/dom", ..], function(dom){ dom.byId('someId').i
我对“-gencode”语句中的“code=sm_X”选项有点困惑。 一个例子:NVCC 编译器选项有什么作用 -gencode arch=compute_13,code=sm_13 嵌入库中? 只有
我为我的表格使用 X-editable 框架。 但是我有一些问题。 $(document).ready(function() { $('.access').editable({
我一直在通过本教程学习 flask/python http://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-i-hello-wo
我想将 Vim 和 EMACS 用于 CNC、G 代码和 M 代码。 Vim 或 EMACS 是否有任何语法或模式来处理这种类型的代码? 最佳答案 一些快速搜索使我找到了 this vim 和 thi
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 想改进这个问题?更新问题,使其成为 on-topic对于堆栈溢出。 7年前关闭。 Improve this
这个问题在这里已经有了答案: Enabling markdown highlighting in Vim (5 个回答) 6年前关闭。 当我在 Vim 中编辑包含 Markdown 代码的 READM
我正在 Swift3 iOS 中开发视频应用程序。基本上我必须将视频 Assets 和音频与淡入淡出效果合并为一个并将其保存到 iPhone 画廊。为此,我使用以下方法: private func d
pipeline { agent any stages { stage('Build') { steps { e
我是一名优秀的程序员,十分优秀!