正如@zero323 所指出的,有几个spark 函数在运行时通过添加到全局字典生成包装器,然后将它们添加到__all__。正如@vincent-claes 所指出的,使用function 路径(如F 或其他东西,我更喜欢更具描述性的东西)引用函数可以使导入不会在PyCharm 中显示错误。但是,正如@nexaspx 在对该答案的评论中所暗示的那样,这会将警告转移到使用行。正如@thomas 提到的,可以安装 pyspark-stubs 来改善这种情况。
但是,如果由于某种原因添加该软件包不是一个选项(也许您正在为您的环境使用 docker 映像并且现在无法将其添加到映像中),或者它不起作用,这是我的解决方法:首先,只为生成的带有别名的包装器添加一个导入,然后禁用对该导入的检查。这允许所有用法仍然在同一语句中检查其他函数,将警告点减少到只有一个,然后忽略那个警告。
from pyspark.sql import functions as pyspark_functions
# noinspection PyUnresolvedReferences
from pyspark.sql.functions import col as pyspark_col
# ...
pyspark_functions.round(...)
pyspark_col(...)
如果您有多个导入,则将它们分组为只有一个 noinspection:
# noinspection PyUnresolvedReferences
from pyspark.sql.functions import (
col as pyspark_col, count as pyspark_count, expr as pyspark_expr,
floor as pyspark_floor, log1p as pyspark_log1p, upper as pyspark_upper,
)
(这是我使用Reformat File 命令时 PyCharm 对其进行格式化的方式)。
虽然我们讨论的是如何导入 pyspark.sql.functions,但我建议不要从 pyspark.sql.functions 导入各个函数,以避免遮蔽 Python 内置函数,这会导致难以理解的错误,如 @SARose states。