Bam*_*mqf 32 python apache-spark apache-spark-sql pyspark pyspark-sql
在pyspark 1.6.2中,我可以导入col函数
from pyspark.sql.functions import col
Run Code Online (Sandbox Code Playgroud)
但是当我尝试在Github源代码中查找它时,我发现文件中没有col函数,functions.pypython如何导入一个不存在的函数?
use*_*411 36
它存在.它没有明确定义.从中导出的函数pyspark.sql.functions是围绕JVM代码的瘦包装器,除了一些需要特殊处理的例外,它们是使用辅助方法自动生成的.
如果你仔细检查你会发现col列出_functions的来源.该字典进一步迭代并_create_function用于生成包装器.每个生成的函数都直接分配给中的相应名称globals.
最后__all__,它定义了从模块导出的项目列表,只导出globals黑名单中包含的所有排除项目.
如果这个机制仍然不清楚,你可以创建一个玩具示例:
foo.py使用以下内容创建调用的Python模块:
# Creates a function assigned to the name foo
globals()["foo"] = lambda x: "foo {0}".format(x)
# Exports all entries from globals which start with foo
__all__ = [x for x in globals() if x.startswith("foo")]
Run Code Online (Sandbox Code Playgroud)将它放在Python路径上的某个位置(例如在工作目录中).
进口foo:
from foo import foo
foo(1)
Run Code Online (Sandbox Code Playgroud)这种元编程方法的一个不希望的副作用是,工具可能无法识别定义的函数,这完全取决于静态代码分析.这不是一个关键问题,可以在开发过程中安全地忽略.
根据IDE安装类型,注释可能会解决问题.
Vin*_*aes 31
在 Pycharm 中,col函数和其他函数被标记为“未找到”
一种解决方法是从那里导入functions并调用该col函数。
例如:
from pyspark.sql import functions as F
df.select(F.col("my_column"))
Run Code Online (Sandbox Code Playgroud)
Tho*_*mas 15
如上所述,pyspark 会动态生成一些函数,这使得大多数 IDE 无法正确检测它们。但是,有一个 python 包pyspark-stubs,其中包含一组存根文件,以便改进类型提示、静态错误检测、代码完成,...只需安装
pip install pyspark-stubs==x.x.x
Run Code Online (Sandbox Code Playgroud)
(其中 xxx 必须替换为您的 pyspark 版本(例如在我的情况下为 2.3.0)),col并且将检测其他功能,而无需更改大多数 IDE(Pycharm、Visual Studio Code、Atom、Jupyter)的代码中的任何内容笔记本, ...)
Dmy*_*tro 10
从VS Code 1.26.1开始, 可以通过修改python.linting.pylintArgs设置来解决:
"python.linting.pylintArgs": [
"--generated-members=pyspark.*",
"--extension-pkg-whitelist=pyspark",
"--ignored-modules=pyspark.sql.functions"
]
Run Code Online (Sandbox Code Playgroud)
该问题在github上得到了解释:https : //github.com/DonJayamanne/pythonVSCode/issues/1418#issuecomment-411506443
直接导入所有pyspark函数;
from pyspark.sql.functions import *
...
col('my_column')
Run Code Online (Sandbox Code Playgroud)
您可能还想使用别名来解决函数阴影问题;
from pyspark.sql import functions as f
...
f.col('my_column')
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
28859 次 |
| 最近记录: |