Выполните NLTK для текстовых файлов, используя AWS Glue - PullRequest
0 голосов
/ 09 июля 2020

Итак, я хочу выполнить NLTK для текстовых файлов, которые хранятся на S3 как часть процесса ETL в AWS Glue. [https://drive.google.com/drive/folders/1ne16UVNHd0K6790CXsiMdyRRcgZeatjn?usp=sharing] [1] - это внешние Python зависимости, которые я использовал для задания ETL.

Я изменил файл data.py, который находится в пакете NLTK, согласно [{ ссылка }] [ 2] это, но я использовал эту "/ tmp / nltk_data" в качестве переменной пути.

Это мой пример сценария

import pyspark
import nltk

from awsglue.utils import getResolvedOptions
from pyspark.context import SparkContext
from awsglue.context import GlueContext
from awsglue.job import Job
from awsglue.dynamicframe import DynamicFrame

from pyspark.ml.feature import Tokenizer, StopWordsRemover
from pyspark.ml.feature import NGram
from pyspark.sql.types import StringType
from pyspark.sql import SQLContext 
from pyspark.sql.functions import explode,regexp_replace

from nltk.corpus import stopwords
nltk.data.path = ["/tmp"]

from nltk.stem import WordNetLemmatizer


sparkcontext = SparkContext.getOrCreate()
gluecontext = GlueContext(SparkContext.getOrCreate())
sqlcontext = SQLContext(gluecontext)

glueJob = Job(gluecontext)

## Initializa Glue Job
glueJob.init("NLTKjob")

#Lemmatizen Function

def lemma(x):
    
    lemmatizer = WordNetLemmatizer()
    return lemmatizer.lemmatize(x)

## Reading Files from S3 to Spark RDD.
init_RDD = sparkcontext.textFile("<s3 file path>")

print(init_RDD)
print("Type of init_RDD is :: ",type(init_RDD))

## Perform Lemmatizen on RDD.

RDD_lem_words = init_RDD.map(lemma)
print(RDD_lem_words)
print("Type of RDD_lem_words is ::",type(RDD_lem_words))

RDD_len_list = RDD_lem_words.collect()
print(RDD_len_list)
print("Type Of RDD_len_list is ::",type(RDD_len_list))

glueJob.commit()

, но я получил ошибку в NLTK

, а также показывает следующие журналы:

nltk.download('wordnet')
  [0m
  Attempted to load [93mcorpora/wordnet.zip/wordnet/[0m



  Searched in:
    - '/home/nltk_data'
    - '/usr/nltk_data'
    - '/usr/share/nltk_data'

is "/ tmp / nltk_data" - правильный путь для данных NLTK в AWS Glue

Если я не добавляю данные NLTK в Python Внешний zip, он загружен в "/ home / nltk_data", но не доступен для Spark Application.

Пожалуйста, помогите мне с этим вариантом использования. [1]: https://drive.google.com/drive/folders/1ne16UVNHd0K6790CXsiMdyRRcgZeatjn?usp=sharing [2]: { ссылка }

...