如何抑制PySpark(含Pandas API on Spark)的FutureWarning警告?
解决PySpark Pandas API的FutureWarning抑制问题
你遇到的问题是因为这些iteritems的FutureWarning可能是在Spark的executor worker进程中产生的,而非driver进程,所以单纯在driver里设置warnings模块或者Spark日志级别无法覆盖到worker的警告输出。以下是几个针对性的解决方案:
精准过滤特定模块的警告
直接针对pyspark.pandas.internal模块的FutureWarning进行忽略,这种方式不会影响其他重要警告,推荐优先使用:import warnings # 只忽略pyspark.pandas.internal模块的FutureWarning warnings.filterwarnings("ignore", category=FutureWarning, module="pyspark.pandas.internal")注意要在导入
pyspark.pandas之前执行这段代码,确保过滤规则生效。为Spark Worker进程配置警告规则
如果上面的方法仍无效,说明警告是在executor worker里产生的,这时候需要通过Spark配置传递环境变量,让所有worker进程启动时都应用警告过滤:from pyspark.sql import SparkSession spark = SparkSession.builder \ .appName("YourAnalysisApp") \ # 通过executor环境变量设置警告过滤 .config("spark.executorEnv.PYTHONWARNINGS", "ignore::FutureWarning:pyspark.pandas.internal") \ .getOrCreate()这个配置会让每个worker进程的Python环境都忽略指定模块的FutureWarning,从根源上解决worker输出警告的问题。
全局设置PYTHONWARNINGS环境变量(可选)
如果你不需要区分模块,也可以在代码最开头设置全局的Python警告环境变量,同样要在导入pyspark相关模块前执行:import os # 全局忽略pyspark.pandas.internal的FutureWarning os.environ["PYTHONWARNINGS"] = "ignore::FutureWarning:pyspark.pandas.internal"
内容的提问来源于stack exchange,提问作者Cody Green
相关产品推荐
相关产品推荐

