Я ужасно незнаком с искрой, но я почти уверен, что существует хороший способ сделать то, что я хочу, гораздо быстрее, чем я это делаю в настоящее время.
По сути, у меня есть корзина S3, в которой много JSON-данных из твиттера. Я хочу просмотреть все эти файлы, получить текст из JSON, выполнить анализ настроений (в настоящее время использующий Stanford NLP) для текста, а затем загрузить Tweet + Sentiment в базу данных (сейчас я использую динамо, но это это не заигрывание)
Код, который у меня сейчас есть,
/**
* Per thread:
* 1. Download a file
* 2. Do sentiment on the file -> output Map<String, List<Float>>
* 3. Upload to Dynamo: (a) sentiment (b) number of tweets (c) timestamp
*
*/
List<String> keys = s3Connection.getKeys();
ThreadPoolExecutor threads = new ThreadPoolExecutor(40, 40, 10000, TimeUnit.MILLISECONDS, new ArrayBlockingQueue<>(10));
threads.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
for (String key : keys) {
threads.submit(new Thread(() -> {
try {
S3Object s3Object = s3Connection.getObject(key);
Map<String, List<Float>> listOfTweetsWithSentiment = tweetSentimentService.getTweetsFromJsonFile(s3Object.getObjectContent());
List<AggregatedTweets> aggregatedTweets = tweetSentimentService.createAggregatedTweetsFromMap(listOfTweetsWithSentiment, key);
for (AggregatedTweets aggregatedTweet : aggregatedTweets) {
System.out.println(aggregatedTweet);
tweetDao.putItem(aggregatedTweet);
}
} catch (Exception e) {
System.out.println(e.getMessage());
}
}));
}
Это работает и хорошо. И я смог ускорить процесс всего до 2 часов, запустив этот код в определенных диапазонах дат (т. Е. GetKeys получает ключи только для определенных диапазонов дат) и раскручивая множество экземпляров этого процесса в разных EC2, каждый из которых действует по-своему. диапазон дат.
Тем не менее, должен быть более быстрый способ сделать это с хорошим уменьшением ole карты, но я просто не знаю, как вообще начать изучать это. Можно ли выполнить анализ настроений на моей карте, а затем уменьшить его на основе отметки времени?
Кроме того, я изучал использование AWS Glue, но не вижу хорошего способа использовать там библиотеку Stanford NLP.
Любая помощь будет принята с благодарностью.