NLTK Data 可以安装在 AWS Redshift 环境中吗?

Posted

技术标签:

【中文标题】NLTK Data 可以安装在 AWS Redshift 环境中吗?【英文标题】:Can NLTK Data be installed in AWS Redshift environment? 【发布时间】:2018-01-28 13:15:44 【问题描述】:

我正在尝试在 AWS Redshift DB 中创建 Python 用户定义的标量 (UDF) 函数。 UDF 包装了以下 Python 代码:

CREATE or replace library nltk language plpythonu from 's3://xxx/dev/python-libraries/nltk-3.2.1.zip'
credentials 'aws_access_key_id=xxx;aws_secret_access_key=yyy' region as 'eu-west-1';

CREATE or replace library textblob language plpythonu from 's3://xxx/dev/python-libraries/textblob-0.15.1-py2.py3-none-any.zip'
credentials 'aws_access_key_id=xxx;aws_secret_access_key=yyy' region as 'eu-west-1';

CREATE or replace FUNCTION f_sentiment_polarity (comment varchar(1000)) RETURNS float IMMUTABLE as $$
from textblob import TextBlob
return TextBlob(comment).sentiment.polarity
$$ LANGUAGE plpythonu;

SELECT f_sentiment_polarity('this would be very useful if the corpora were loaded');

f_sentiment_polarity
--------------------
                   0

select 语句的结果给了我0

当我在本地环境中运行相同的 Python 代码(Windows 上的 Python 2.7 和 NLTK v3.2.5,我得到0.39

Python 2.7.10 (default, May 23 2015, 09:44:00) [MSC v.1500 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> from textblob import TextBlob
>>> TextBlob('this would be very useful if the corpora were loaded').sentiment.polarity
0.39
>>>

我推测这是因为各种 NLTK 语料库尚未加载到 AWS Redshift Python 环境中。如下创建另一个 Redshift UDF 似乎证明了这一点:

CREATE or replace FUNCTION f_num_brown_words () RETURNS int IMMUTABLE as $$
from nltk.corpus import brown
return len(brown.words())
$$ LANGUAGE plpythonu;

select f_num_brown_words();

ERROR: XX000: LookupError: 
**********************************************************************
  Resource u'corpora/brown' not found.  Please use the NLTK
  Downloader to obtain the resource:  >>> nltk.download()
  Searched in:
    - "'/'/nltk_data"
    - '/usr/shar

问题:有没有办法在 AWS Redshift Python 环境中加载 NLTK 语料库,以便我的 UDF 能够正常运行?

【问题讨论】:

你不能访问外部数据——这是不允许的。 redshift 服务器可以托管文件存储吗?或者与远程存储交互?如果远程磁盘使用nltk.data.path.append在本地挂载,则可以将 NLTK 指向另一个位置@ 【参考方案1】:

您可以将自定义库加载到您的集群中,更多信息请参见official docs。

我按照说明进行操作,并且它对另一个库对我有用。

【讨论】:

嗨,Alex,是的,我已经加载了两个库 textblob 及其依赖项 nltk。然而,nltk 需要下载一些数据(Corpora),目前尚不清楚是否或如何在 Redshift 环境中完成。

以上是关于NLTK Data 可以安装在 AWS Redshift 环境中吗?的主要内容,如果未能解决你的问题,请参考以下文章

离线下载安装 NLTK 的 nltk_data 模块

linux下python3离线加载nltk_data,不用nltk.download()

下载nltk数据包报错

AWS:通过使用 amazon-data-pipeline 将数据从 S3 传输到 Redshift 来实现除 COPY 之外的其他功能

nltk_data 本地安装解压脚本

如何从本地安装的 spark 连接到 aws-redshift?