前言:
- 唉~很不幸又躺了一次坑,自己在这里困惑了好久,不过吃一堑长一智,躺坑躺多了.自然而然你就成长了.不说了在这里记录一下这个坑,也好给后面的小伙伴们指条名路:
- 是这样的我这里使用Spark 的 Struct Streaming ,说来都是累啊这个东西根本没啥教程,官网的文档也就只是说了一些简单的入门用法,但在实际开发中可谓是困难重重啊,出了问题找个解决方案太难了…
正题:
- 我的导包代码如下:
from pyspark.sql.functions import col
-
在编辑器中运行时就出现了令人讨厌的红字:
-
No module named ‘col’
-
What? 我觉得它是在耍我
-
于是在网上找了很久的资料,都没找到问题所在,后面在StackOveflow上面终于找到了答案,可能是这个问题太幼稚吧才这么难找.
-
其实出现这个错误并的原因不是源码包的问题,而是代码编辑器的问题,它们进行检测编译时不能通过,所以就会报错
-
出现的原因:
先看示例
# =====================my_module.py==========================
# 创建一个函数命名为func
globals()["func"] = lambda x: print(x)
# 从全局变量当中找出上面定义的这个函数相关的元素
__all__ = [x for x in globals() if x.startswith("func")]
#===========================end==============================
# =======================test.py=============================
# 我们再来导入前面定义的这个包中的函数
from my_module import func
func("test")
# 如果你是在编辑器中执行的,你会发现不能通过编译检查,会说找不到func
# 这是因为只依赖于静态代码分析的工具可能无法识别已定义的功能,所以就造成了编译不能通过
- 解决思路有三种:
1.如果你是使用VS进行编程的可以通过修改 python.linting.pylintArgs 的值来解决
"python.linting.pylintArgs": [
"--generated-members=pyspark.*",
"--extension-pkg-whitelist=pyspark",
"--ignored-modules=pyspark.sql.functions"
]
- 安装python包pyspark-stubs,他的作用就是改进一些静态包的提示检测问题
注意 “x.x.x” 要改成你自己PySpark的版本号
pip install pyspark-stubs==x.x.x
- 其实这种方法最简单,其实就是绕开IDE的检查,但是这是可行的
from pyspark.sql.functions as f
f.col("values")
激励自己的话:
还是自己太年轻啊,还要在多趟一些坑才行,加油,骚年
Never give up!