使用 Pyspark 进行单元测试:未关闭的套接字警告

2024-03-03

我想使用 PySpark 进行单元测试。测试本身有效,但是对于我得到的每个测试

  • ResourceWarning: unclosed <socket.socket [...]> and
  • ResourceWarning: unclosed file <_io.BufferedWriter [...]>警告和
  • DeprecationWarning关于invalid escape sequences.

我想了解为什么/如何解决这个问题,以免这些警告扰乱我的单元测试输出。

这是一个 MWE:

# filename: pyspark_unittesting.py
# -*- coding: utf-8 -*-

import unittest


def insert_and_collect(val_in):
    from pyspark.sql import SparkSession
    with SparkSession.builder.getOrCreate() as spark:
        col = 'column_x'
        df = spark.createDataFrame([(val_in,)], [col])

        print('one')
        print(df.count())
        print('two')
        collected = df.collect()
        print('three')
        return collected[0][col]


class MyTest(unittest.TestCase):
    def test(self):
        val = 1
        self.assertEqual(insert_and_collect(val), val)
        print('four')


if __name__ == '__main__':
    val = 1
    print('inserted and collected is equal to original: {}'
          .format(insert_and_collect(val) == val))
    print('five')

如果我用python pyspark_unittesting.py输出是:

Using Spark's default log4j profile: org/apache/spark/log4j-defaults.properties
Setting default log level to "WARN".
To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel).
one
1  
two
three
inserted and collected is equal to original: True
five

如果我用python -m unittest pyspark_unittesting但是,输出是:

/opt/spark/current/python/lib/py4j-0.10.4-src.zip/py4j/java_gateway.py:1890: DeprecationWarning: invalid escape sequence \*
/opt/spark/current/python/lib/py4j-0.10.4-src.zip/py4j/java_gateway.py:1890: DeprecationWarning: invalid escape sequence \*
/opt/spark/current/python/lib/pyspark.zip/pyspark/sql/readwriter.py:398: DeprecationWarning: invalid escape sequence \`
/opt/spark/current/python/lib/pyspark.zip/pyspark/sql/readwriter.py:759: DeprecationWarning: invalid escape sequence \`
/opt/spark/current/python/lib/pyspark.zip/pyspark/sql/readwriter.py:398: DeprecationWarning: invalid escape sequence \`
/opt/spark/current/python/lib/pyspark.zip/pyspark/sql/readwriter.py:759: DeprecationWarning: invalid escape sequence \`
/opt/spark/current/python/lib/pyspark.zip/pyspark/sql/streaming.py:618: DeprecationWarning: invalid escape sequence \`
/opt/spark/current/python/lib/pyspark.zip/pyspark/sql/streaming.py:618: DeprecationWarning: invalid escape sequence \`
/opt/spark/current/python/lib/pyspark.zip/pyspark/sql/functions.py:1519: DeprecationWarning: invalid escape sequence \d
/opt/spark/current/python/lib/pyspark.zip/pyspark/sql/functions.py:1519: DeprecationWarning: invalid escape sequence \d
Using Spark's default log4j profile: org/apache/spark/log4j-defaults.properties
Setting default log level to "WARN".
To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel).
/usr/lib/python3.6/subprocess.py:766: ResourceWarning: subprocess 10219 is still running
  ResourceWarning, source=self)
/usr/lib/python3.6/importlib/_bootstrap.py:219: ImportWarning: can't resolve package from __spec__ or __package__, falling back on __name__ and __path__
  return f(*args, **kwds)
one
1                                                                               
two
/usr/lib/python3.6/socket.py:657: ResourceWarning: unclosed <socket.socket fd=7, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=6, laddr=('127.0.0.1', 49330), raddr=('127.0.0.1', 44169)>
  self._sock = None
three
four
.
----------------------------------------------------------------------
Ran 1 test in 7.394s

OK
sys:1: ResourceWarning: unclosed file <_io.BufferedWriter name=5>

编辑2018-03-29

关于@acue的回答,我尝试使用调用脚本subprocess.Popen- 非常像在unittest module:

In [1]: import pathlib
      : import subprocess
      : import sys
      : 
      : here = pathlib.Path('.').absolute()
      : args = [sys.executable, str(here / 'pyspark_unittesting.py')]
      : opts = dict(stdout=subprocess.PIPE, stderr=subprocess.PIPE, cwd='/tmp')
      : p = subprocess.Popen(args, **opts)
      : out, err = [b.splitlines() for b in p.communicate()]
      : print(out)
      : print(err)
      : 
      : 
[b'one',
 b'1',
 b'two',
 b'three',
 b'inserted and collected is equal to original: True',
 b'five']

[b"Using Spark's default log4j profile: org/apache/spark/log4j-defaults.properties",
 b'Setting default log level to "WARN".',
 b'To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel).',
 b'',
 b'[Stage 0:>                                                          (0 + 0) / 8]',
 b'[Stage 0:>                                                          (0 + 8) / 8]',
 b'                                                                                ']

资源警告不出现...


如果您在中添加忽略它们的指令,这些警告将会消失setUp测试方法:

import unittest
import warnings


class MyTest(unittest.TestCase):
    def test(self):
        val = 1
        self.assertEqual(insert_and_collect(val), val)
        print('four')

    def setUp(self):
        warnings.filterwarnings("ignore", category=ResourceWarning)
        warnings.filterwarnings("ignore", category=DeprecationWarning)

现在运行python3 -m unittest pyspark_unittesting.py输出:

Using Spark's default log4j profile: org/apache/spark/log4j-defaults.properties
Setting default log level to "WARN".
To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel).
one
1                                                                               
two
three
four
.
----------------------------------------------------------------------
Ran 1 test in 11.124s

OK
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Pyspark 进行单元测试:未关闭的套接字警告 的相关文章

  • 帮助需要在可选条件下编写正则表达式[关闭]

    我有一个日志文件包含如下内容 log Using data from yyyy mm dd 2011 8 3 0 files queued for scanning Warning E test H ndler pdf File not F
  • 静态文件配置不正确

    我已经在 Heroku 上部署了简单的博客应用程序 它运行在Django 1 8 4 我在静态文件方面遇到了一些问题 当打开我的应用程序时 我看到Application Error页面 所以我尝试调试它并发现当我提交到 Heroku 时它无
  • Pip install 导致此错误“ cl.exe' failed with exit code 2 ”

    我已经阅读了有关此错误的所有其他问题 但令人沮丧的是 没有一个给出有效的解决方案 如果我跑pip install sentencepiece在命令行中 它给出了以下输出 src sentencepiece sentencepiece wra
  • 创建一个打开文件并创建字典的函数

    我有一个正在处理的文件 我想创建一个读取文件并将内容放入字典中的函数 然后该字典需要通过 main 函数传递 这是主程序 它无法改变 我所做的一切都必须与主程序配合 def main sunspot dict file str raw in
  • 通过鼻子测试检查某个函数是否发出警告

    我正在使用编写单元测试nose http somethingaboutorange com mrl projects nose 0 11 2 我想检查函数是否引发警告 该函数使用warnings warn 这是很容易就能做到的事情吗 def
  • Django 如何从 ManyToManyField 序列化并列出全部

    我正在使用 Django 1 9 1 开发移动应用程序后端 我实现了关注者模型 现在我想列出用户的所有关注者 但目前我不得不这样做 我还使用 Django Rest 框架 这是我的 UserProfile 模型 class UserProf
  • Python 使用 M2Crypto 通过 S/MIME 对消息进行签名

    我现在花了几个小时 但找不到我的错误 我想要一个简单的例程来创建 S MIME 签名消息 稍后可以与 smtplib 一起使用 这是我到目前为止所拥有的 usr bin python2 7 coding utf 8 from future
  • 对图像使用 Pixellib 自定义训练时出现 input_image 元形状错误

    我正在使用 Pixellib 来训练自定义图像实例分割 我创建了一个数据集 可以在下面的链接中看到 数据集 https drive google com drive folders 1MjpDNZtzGRNxEtCDcTmrjUuB1ics
  • 理解@property装饰器和继承[重复]

    这个问题在这里已经有答案了 这里是 Python 3 以防万一它很重要 我试图正确理解如何实现继承 property使用 我已经搜索了 StackOverflow 并阅读了大约 20 个类似的问题 但无济于事 因为他们试图解决的问题略有不同
  • Pyinstaller --onefile 警告文件已存在但不应存在

    跑步时Pyinstaller onefile 并开始得到结果 exe 会出现多个弹出窗口 并显示以下警告 WARNING file already exists but should not C Users myuser AppData L
  • 如何使用 python 操作系统更改驱动器?

    我正在尝试更改当前目录C to Y 我试过 import os os chdir Y 但我不断收到错误消息 提示无法找到驱动器 本质上我正在寻找相当于 cd d cmd 中的命令 你确定吗Y 确实是有效的驱动器号吗 Try os chdir
  • 如何使用python读取最后一行的特定位置

    我有一个太大的 txt 文件 并且有几行类似的行 如下所示 字1 字2 字3 字4 553 75 我对位置 4 值 感兴趣 即最后一行 553 75 我的文件文本 word1 word2 word3 word4 553 20 word1 w
  • 如何在matplotlib中基于x轴更改直方图颜色

    我有根据 pandas 数据框计算出的直方图 我想根据 x 轴值更改颜色 例如 If the value is 0 the color should be green If the value is gt 0 the color shoul
  • 向量化 numpy bincount

    我有一个 2d numpy 数组 A我要申请np bincount 到矩阵的每一列A生成另一个二维数组B由原始矩阵每列的 bincounts 组成A 我的问题是 np bincount 是一个采用一维数组的函数 它不是像这样的数组方法B A
  • 如何将 pytest 装置与 django TestCase 一起使用

    我如何在TestCase方法 类似问题的几个答案似乎暗示我的例子应该有效 import pytest from django test import TestCase from myapp models import Category py
  • 测试中的模型 - Django 1.7 问题

    我正在尝试将我的项目移植为使用 Django 1 7 除了一件事之外 一切都很好 测试文件夹内的模型 Django 1 7 新迁移在内部运行 migrate 命令 在运行syncdb之前 这意味着如果模型未包含在迁移中 它将不会填充到数据库
  • Jinja2中获取请求参数

    如何检索请求参数a在 Jinja2 模板中 http foo bar a 1 我这个答案有点晚了 但其他解决方案并没有真正考虑到您对 Flask 的使用 事实上 您将 Flask 与 Jinja2 一起使用 这使得您的情况与其他框架有点不同
  • 如何让你的精灵在pygame中跳跃

    目前我已经制作了一个平台游戏 可以左右移动我的角色 他从地上开始 关于如何让他跳的任何想法 因为我不明白 目前 如果我按住向上键 我的玩家精灵将连续向上移动 或者如果我按下它 我的玩家精灵将向上移动并保持向上 我想找个办法远离他 让我重新跌
  • 在Python中从列表中获取n个项目组的惯用方法? [复制]

    这个问题在这里已经有答案了 给定一个列表 A 1 2 3 4 5 6 是否有任何惯用的 Pythonic 方式来迭代它 就好像它是 B 1 2 3 4 5 6 除了索引之外 这感觉像是 C 的遗留物 for a1 a2 in A i A i
  • Shap - 颜色条不显示在摘要图中

    显示summary plot时 不显示颜色条 shap summary plot shap values X train 我尝试过改变plot size 当绘图较高时 会出现颜色条 但它非常小 看起来不应该 shap summary plo

随机推荐

  • DateTime.AddYears 在闰年的行为

    在 DateTime 上使用 AddYears 方法时 任何人都可以解释 NET 中闰年计算背后的数学或简单推理吗 如果您将 2012 年 2 月 29 日加上一年 您将得到 2013 年 2 月 28 日 而不是 2013 年 3 月 1
  • 如何在 Scala 中为泛型类型提供默认类型类?

    在 Scala 中 如果你创建一个类型类 比如代数结构Monoid T 您可以为不同类型的幺半群提供许多默认类型类实现 假设幺半群定义为 trait Monoid T def op x T y T T def id T Since Stri
  • 具有三个表的递归 CTE

    我正在使用 SQL Server 2008 R2 SP1 我想通过 沿着树向上走 来递归地找到某个组织单位的第一个非空经理 我有一张包含组织单位 ORG 的表 一张包含每个组织的父级的表 ORG 中的单位 我们将该表称为 ORG PAREN
  • 如何清除 firebase 云消息通知?

    我使用firebase云消息向手机发送消息 并且可以成功接收通知 但在某些情况下 我不会单击通知来打开我的应用程序 而是手动打开应用程序以进入前台 我想要的是当我打开应用程序时 通知栏中的通知应该自动清除 以下代码将清除您的应用程序的所有通
  • 有没有办法更新云功能中的collectionGroup

    我正在构建一个聊天应用程序 当用户对其本地配置文件进行更新时 我想使用云功能在整个集合组中进行更新 我成功侦听云函数中的更新并检索具有以下内容的 collectionGroups 列表 const collectionGroupNamere
  • swift 不允许函数参数初始化吗?

    第一个块生成一个通用的 Swift 编译错误 甚至不指向该行 let screenDivision size width 5 var game1 SKSpriteNode color redColor size CGSize width 2
  • Nativescript:在路由器出口之间导航

    更好的介绍请参见关于奥特莱斯的博客文章 https www nativescript org blog using nested router outlets with nativescript and angular 我使用 TabVie
  • 如何在 Swagger UI 中删除“示例”组合框或更改其文本?

    我的 Swagger UI 有一个问题 它显示一个空的 示例 组合框 下图中标记为黄色 看起来不太好 有没有办法删除它或将其文本更改为有用的内容 我尝试添加example标签 但它不起作用 操作定义如下所示 post tags pet su
  • azurepipelines-coverage.yml 的架构,用于为 PR 配置新发布的代码覆盖率指标功能

    该功能已描述here https learn microsoft com en us azure devops release notes 2019 sprint 155 update code coverage metrics and b
  • 如何删除数据库,错误5030数据库无法锁定

    我正在尝试删除 SQL Server 2005 中的现有数据库 我的第一次尝试产生了以下错误 5030 数据库不能独占 锁定以执行操作 此后我已经杀死了所有正在访问数据库的进程 我还删除了它之前涉及的复制订阅 除了 SQL Server 进
  • 未出现写入 ILogger 的 Serilog (Azure Functions V2)

    我已安装 Serilog 并配置为将日志事件数据写入 MS SQL Server for Azure Function 中的表 系统日志和静态类本身写入的日志显示在表中 但是当我尝试使用 Extensions Logging ILogger
  • 核心数据和分页

    我有一个包含 50 000 条记录的数据库 我正在使用核心数据从搜索中获取记录 一次搜索可以轻松返回 1000 条记录 使用 core data 和 uitableview 来分页这些记录需要什么 我想一次显示 100 条记录 并在查看 1
  • iOS 中如何将字符串的一部分加粗?

    我想让文本字符串的某些部分变为粗体 Eg 这就是要大胆 这是正常的字符串 在Android中 可以通过使用可生成字符串轻松实现 iOS 中的等价物是什么 是的 可以通过以下方式实现NSAttributedString https devel
  • Laravel 用户特定的缓存

    我从来没有对缓存做过太多事情 但现在我正在尝试尝试一下 我有一个返回大量数据的仪表板 为了减轻负载 我像这样缓存数据 return cache gt rememberForever something function return aut
  • EF Core 2.2,将字符串参数传递给 FromSql 语句

    public List
  • 如何一次反编译多个jar?

    好吧 我想主题已经说明了一切 理想的解决方案将找到某个文件夹中的所有 jar 它们可能位于子文件夹中 并将找到的所有源写入单个 src 目录 当然还要维护包文件夹 具体用例 反编译所有 Eclipse 插件 jar 下载JAD反编译器 ht
  • 在 PHPUnit 中,如何模拟父方法?

    我想测试一个调用同名父方法的类方法 有没有办法做到这一点 class Parent function foo echo bar class Child function foo foo parent foo return foo class
  • 无法修复“语法错误,‘foreach’语句仅在源级别为 1.5 时可用”

    我正在编写一个 Java 代理 它使用参数化集合类型和增强的 for 循环 然后 Domino Designer 8 5 3 告诉我通过快速修复操作将项目的合规性级别更改为 1 5 如果我这样做 项目就会重建 并且不会发生任何变化 如果我转
  • Shopify.onItemAdded 更新#cart 和 cart.item.count

    我正在尝试在 Shopify 中制作一个 ajaxed 购物车 我已使产品页面将商品添加到购物车 而无需刷新或转到购物车页面 要查看购物车 您可以单击输入或带有 cart show 的链接 因此我将其添加到 添加到购物车 输入中
  • 使用 Pyspark 进行单元测试:未关闭的套接字警告

    我想使用 PySpark 进行单元测试 测试本身有效 但是对于我得到的每个测试 ResourceWarning unclosed