gpt4 book ai didi

python - 如何模拟对 pyspark sql 函数的内部调用

转载 作者:行者123 更新时间:2023-12-04 15:38:25 26 4
gpt4 key购买 nike

得到以下pyspark代码:

import pyspark.sql.functions as F

null_or_unknown_count = df.sample(0.01).filter(
F.col('env').isNull() | (F.col('env') == 'Unknown')
).count()

在测试代​​码中,数据框被模拟,所以我试图为这个调用设置 return_value,如下所示:
from unittest import mock
from unittest.mock import ANY

@mock.patch('pyspark.sql.DataFrame', spec=pyspark.sql.DataFrame)
def test_null_or_unknown_validation(self, mock_df):
mock_df.sample(0.01).filter(ANY).count.return_value = 250

但这失败了:
File "/usr/local/lib/python3.7/site-packages/pyspark/sql/functions.py", line 44, in _
jc = getattr(sc._jvm.functions, name)(col._jc if isinstance(col, Column) else col)
AttributeError: 'NoneType' object has no attribute '_jvm'

也试过 mock_df.sample().filter().count.return_value = 250 ,这给出了相同的错误。

我如何模拟过滤器,即 F.col('env').isNull() | (F.col('env') == 'Unknown')正确吗?

最佳答案

感谢我在工作中聪明的同事,这就是答案。我们必须模拟 pyspark.sql.functions.col然后设置一个return_value。

@mock.patch('pyspark.sql.functions.col')
@mock.patch('pyspark.sql.DataFrame', spec=pyspark.sql.DataFrame)
def test_null_or_unknown_validation(self, mock_df, mock_functions):
mock_functions.isNull.return_value = True # (or False also works)
mock_df.sample(0.01).filter(ANY).count.return_value = 250

使用 mock_df.sample().filter().count.return_value = 250也工作正常。

关于python - 如何模拟对 pyspark sql 函数的内部调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58666424/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com