使用导入延迟(例如NLTK或PATTERN重复标签磁盘'C:// C://..spark-core_2.11-2.3.2.jar'

问题在于Windows路径和库是像nltk一样延迟导入的,这意味着nltk和pattern在使用它们时会导入其库,此时模块importlib_metada.py和pathlib.py尝试使用以下命令读取PYTHONPATH路径(D:/ D:/)中的值不正确,则代码将爆炸。

首先,我们有一个简单的函数

import nltk
def print_stopwords():
  print(nltk.corpus.stopwords)

在本地模式下,您可以运行此命令,并得到所有停用词,确定

如果要在Spark的地图中使用此功能以实现Pyspark工作流程,则上面的代码不起作用。为什么?我真的不知道...

我认为它不起作用的原因是由于Spark JAVA库在执行如下所示的map函数时使用和修改了PYTHONPATH:

import nltk
from pyspark.sql import SQLContext,SparkSession

spark = (SparkSession
         .builder
         .master("local[*]")
         .appName("Nueva")
         .getOrCreate())

sc = spark.sparkContext
sqlContext = SQLContext(sc)

def print_stopwords(x):
    print("\n",x)
    print(nltk.corpus.stopwords.words('english'))
    return x

prueba = sc.parallelize([0,1,2,3])
r = prueba.map(print_stopwords)
r.take(1)

我得到了错误

  File "C:\programdata\Anaconda3\lib\site-packages\nltk\__init__.py",line 143,in <module>
    from nltk.chunk import *
  File "C:\programdata\Anaconda3\lib\site-packages\nltk\chunk\__init__.py",line 157,in <module>
    from nltk.chunk.api import ChunkParserI
  File "C:\programdata\Anaconda3\lib\site-packages\nltk\chunk\api.py",line 13,in <module>
    from nltk.parse import ParserI
  File "C:\programdata\Anaconda3\lib\site-packages\nltk\parse\__init__.py",line 100,in <module>
    from nltk.parse.transitionparser import TransitionParser
  File "C:\programdata\Anaconda3\lib\site-packages\nltk\parse\transitionparser.py",line 22,in <module>
    from sklearn.datasets import load_svmlight_file
  File "C:\programdata\Anaconda3\lib\site-packages\sklearn\datasets\__init__.py",in <module>
    from .twenty_newsgroups import fetch_20newsgroups
  File "C:\programdata\Anaconda3\lib\site-packages\sklearn\datasets\twenty_newsgroups.py",line 44,in <module>
    from ..feature_extraction.text import CountVectorizer
  File "C:\programdata\Anaconda3\lib\site-packages\sklearn\feature_extraction\__init__.py",line 10,in <module>
    from . import text
  File "C:\programdata\Anaconda3\lib\site-packages\sklearn\feature_extraction\text.py",line 28,in <module>
    from ..preprocessing import normalize
  File "C:\programdata\Anaconda3\lib\site-packages\sklearn\preprocessing\__init__.py",line 6,in <module>
    from ._function_transformer import FunctionTransformer
  File "C:\programdata\Anaconda3\lib\site-packages\sklearn\preprocessing\_function_transformer.py",line 5,in <module>
    from ..utils.testing import assert_allclose_dense_sparse
  File "C:\programdata\Anaconda3\lib\site-packages\sklearn\utils\testing.py",line 718,in <module>
    import pytest
  File "C:\programdata\Anaconda3\lib\site-packages\pytest.py",in <module>
    from _pytest.assertion import register_assert_rewrite
  File "C:\programdata\Anaconda3\lib\site-packages\_pytest\assertion\__init__.py",line 7,in <module>
    from _pytest.assertion import rewrite
  File "C:\programdata\Anaconda3\lib\site-packages\_pytest\assertion\rewrite.py",line 26,in <module>
    from _pytest.assertion import util
  File "C:\programdata\Anaconda3\lib\site-packages\_pytest\assertion\util.py",line 8,in <module>
    import _pytest._code
  File "C:\programdata\Anaconda3\lib\site-packages\_pytest\_code\__init__.py",line 2,in <module>
    from .code import Code  # noqa
  File "C:\programdata\Anaconda3\lib\site-packages\_pytest\_code\code.py",line 23,in <module>
    import pluggy
  File "C:\programdata\Anaconda3\lib\site-packages\pluggy\__init__.py",line 16,in <module>
    from .manager import Pluginmanager,PluginValidationError
  File "C:\programdata\Anaconda3\lib\site-packages\pluggy\manager.py",line 11,in <module>
    import importlib_metadata
  File "C:\programdata\Anaconda3\lib\site-packages\importlib_metadata\__init__.py",line 549,in <module>
    __version__ = version(__name__)
  File "C:\programdata\Anaconda3\lib\site-packages\importlib_metadata\__init__.py",line 511,in version
    return distribution(distribution_name).version
  File "C:\programdata\Anaconda3\lib\site-packages\importlib_metadata\__init__.py",line 482,in distribution
    return Distribution.from_name(distribution_name)
  File "C:\programdata\Anaconda3\lib\site-packages\importlib_metadata\__init__.py",line 183,in from_name
    dist = next(dists,None)
  File "C:\programdata\Anaconda3\lib\site-packages\importlib_metadata\__init__.py",line 425,in <genexpr>
    for path in map(cls._switch_path,paths)
  File "C:\programdata\Anaconda3\lib\site-packages\importlib_metadata\__init__.py",line 449,in _search_path
    if not root.is_dir():
  File "C:\programdata\Anaconda3\lib\pathlib.py",line 1351,in is_dir
    return S_ISDIR(self.stat().st_mode)
  File "C:\programdata\Anaconda3\lib\pathlib.py",line 1161,in stat
    return self._accessor.stat(self)
OSError: [WinError 123] The file name,directory name or volume label syntax is not correct: 'C:\\C:\\Enviroments\\spark-2.3.2-bin-hadoop2.7\\jars\\spark-core_2.11-2.3.2.jar'

我从pathlib.py和importlib_metadata.py打印环境变量并获取PYTHONPATH值,如下所示:

'PYTHONPATH': 'C:\\Enviroments\\spark-2.3.2-bin-hadoop2.7\\python\\lib\\pyspark.zip;C:\\Enviroments\\spark-2.3.2-bin-hadoop2.7\\python\\lib\\py4j-0.10.7-src.zip;/C:/Enviroments/spark-2.3.2-bin-hadoop2.7/jars/spark-core_2.11-2.3.2.jar'

我尝试在函数内部,外部以及所有方式中编辑路径...但是在某些时候,Spark会序列化函数并编辑PYTHONPATH ...在python文件,Java文件中不存在,并且我无法调试之所以使用此代码,是因为spark在容器内运行,具有一个IP和端口,由于我的IDE(Intellij Idea)的许多复杂原因,我无法输入它。

不起作用的原因是由于此斜杠-> /C:/Enviroments/spark-2.3.2-bin-hadoop2.7/jars/spark-core_2.11-2.3.2.jar'。 python像绝对路径一样在Windows中解释此斜线,并在路径的开头/ C:=> C:/ C:/添加磁盘标签。然后在执行过程中,它会产生此路线显然不存在的错误。

请帮助我! 在此先感谢:)

redroom88 回答:使用导入延迟(例如NLTK或PATTERN重复标签磁盘'C:// C://..spark-core_2.11-2.3.2.jar'

我使用pytest遇到了同样的问题。对于Windows中格式错误的路径,我没有适当的解决方案。

您可以像这样对它应用快速修复:

for path in list(sys.path):
    if not os.path.exists(path):
        sys.path.remove(path)

您至少会摆脱错误。

,

好的,最近我在Windows上更改了Spark的配置,因为当我发布此问题时,我有一个旧的实现。...

令人惊讶的是,我将我的conda环境移动到了D:驱动器(我也已经安装了火花的驱动器)上,并且它的工作原理...

我不知道的人,但是也许python必须与spark安装在同一驱动器中。

要实现这一点,您可以更改PYSPARK_PYTHON环境变量:

os.environ["PYSPARK_PYTHON"]="D:\conda_envs\\cognition\\python.exe"
os.environ["SPARK_DRIVER_PYTHON"]="D:\conda_envs\\cognition\\python.exe"

确保SPARK_HOME目录与Python或anaconda环境位于同一驱动器盘符中。

或者也许是因为我使用了另一个新环境,因为基本(ANACONDA)环境存在此错误。

¯_(ツ)_ /¯ 随便

最终解决的T.T =)

本文链接:https://www.f2er.com/3102054.html

大家都在问