我在Spark上运行的每个单元测试都会收到一个ResourceWarning,如下所示:
/opt/conda/lib/python3.9/socket.py:775: ResourceWarning: unclosed <socket.socket fd=6, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=6, laddr=('127.0.0.1', 37512), raddr=('127.0.0.1', 38975)>
self._sock = None
ResourceWarning: Enable tracemalloc to get the object allocation traceback
我追踪到了DataFrame.toPandas()
。例如:
import unittest
from pyspark.sql import SparkSession
class PySparkTestCase(unittest.TestCase):
def test_convert_to_pandas_df(self):
spark = SparkSession.builder.master("local[2]").getOrCreate()
rawData = spark.range(10)
print("XXX 1")
pdfData = rawData.toPandas()
print("XXX 2")
print(pdfData)
if __name__ == '__main__':
unittest.main(verbosity=2)
您将在XXX 2
输出行之前看到2个ResourceWarnings。
但是,如果您在unittest之外运行相同的代码,您 * 将不会 * 得到资源警告!
from pyspark.sql import SparkSession
spark = SparkSession.builder.master("local[2]").getOrCreate()
rawData = spark.range(10)
print("XXX 1")
pdfData = rawData.toPandas()
print("XXX 2")
print(pdfData)
那么,unittest是否做了什么导致toPandas()
中出现了这个资源警告呢?我很感激我可以隐藏资源警告(例如,请参见here或here),但我宁愿一开始就没有资源警告!
1条答案
按热度按时间ymzxtsji1#
您可以在运行测试之前将一个名为
PYTHONWARNINGS
的环境变量设置为ignore
值,或者使用python解释器中的-W ignore
开关。