在 Azure Synapse 笔记本中运行 nltk.download ValueError:对已关闭文件进行 I/O 操作

Use*_*181 4 python nltk jupyter-notebook azure-synapse

我正在 Azure Synapse 笔记本中试验 NLTK。当我尝试运行 nltk.download('stopwords') 时,出现以下错误:

ValueError: I/O operation on closed file
Traceback (most recent call last):

  File "/home/trusted-service-user/cluster-env/env/lib/python3.6/site-packages/nltk/downloader.py", line 782, in download
    show(msg.message)

  File "/home/trusted-service-user/cluster-env/env/lib/python3.6/site-packages/nltk/downloader.py", line 775, in show
    subsequent_indent=prefix + prefix2 + " " * 4,

  File "/mnt/var/hadoop/tmp/nm-local-dir/usercache/trusted-service-user/appcache/application_1616860588116_0001/container_1616860588116_0001_01_000001/tmp/9026485902214290372", line 536, in write
    super(UnicodeDecodingStringIO, self).write(s)

ValueError: I/O operation on closed file
Run Code Online (Sandbox Code Playgroud)

如果我尝试运行 nltk.download() 我会收到以下错误:

EOFError: EOF when reading a line
Traceback (most recent call last):

  File "/home/trusted-service-user/cluster-env/env/lib/python3.6/site-packages/nltk/downloader.py", line 765, in download
    self._interactive_download()

  File "/home/trusted-service-user/cluster-env/env/lib/python3.6/site-packages/nltk/downloader.py", line 1117, in _interactive_download
    DownloaderShell(self).run()

  File "/home/trusted-service-user/cluster-env/env/lib/python3.6/site-packages/nltk/downloader.py", line 1143, in run
    user_input = input("Downloader> ").strip()

EOFError: EOF when reading a line
Run Code Online (Sandbox Code Playgroud)

我希望有人能给我一些帮助,了解可能导致此问题的原因以及如何解决它。我还没有找到很多关于从这里去哪里的信息。

编辑:我用来生成错误的代码如下:

import nltk
nltk.download('stopwords')
Run Code Online (Sandbox Code Playgroud)

更新 我最终向 Microsoft 提出了支持请求,这是他们的回应:

Synapse 不支持任意 shell 脚本,您可以在其中下载 NLTK 的相关模型语料库

他们建议我使用 sc.addFile,我最终开始工作。因此,如果其他人发现了这一点,这就是我所做的。

  1. 在此处下载 NLTK 停用词: http: //nltk.org/nltk_data/
  2. 将停用词上传到存储中的以下文件夹:abfss://<file_system>@<account_name>.dfs.core.windows.net/synapse/workspaces/<workspace_name>/nltk_data/corpora/stopwords/
  3. 运行以下代码来导入它们

import os
import sys
import nltk
from pyspark import SparkFiles

#add stopwords from storage
sc.addFile('abfss://<file_system>@<account_name>.dfs.core.windows.net/synapse/workspaces/<workspace_name>/nltk_data/',True)

#append path to NLTK
nltk.data.path.append(SparkFiles.getRootDirectory() + '/nltk_data')

nltk.corpus.stopwords.words('english')
Run Code Online (Sandbox Code Playgroud)

谢谢!

Use*_*181 5

我最终向 Microsoft 提出了支持请求,他们的回复如下:

Synapse 不支持任意 shell 脚本,您可以在其中下载 NLTK 的相关模型语料库

他们建议我使用 sc.addFile,我最终开始工作。因此,如果其他人发现了这一点,这就是我所做的。

  1. 在此处下载 NLTK 停用词: http: //nltk.org/nltk_data/
  2. 将停用词上传到存储中的以下文件夹:abfss://<file_system>@<account_name>.dfs.core.windows.net/synapse/workspaces/<workspace_name>/nltk_data/corpora/stopwords/
  3. 运行以下代码来导入它们

....

import os
import sys
import nltk
from pyspark import SparkFiles
    
#add stopwords from storage
    sc.addFile('abfss://<file_system>@<account_name>.dfs.core.windows.net/synapse/workspaces/<workspace_name>/nltk_data/',True)
    
#append path to NLTK
nltk.data.path.append(SparkFiles.getRootDirectory() + '/nltk_data')
    
nltk.corpus.stopwords.words('english')
Run Code Online (Sandbox Code Playgroud)

谢谢!