[英]Using Spark's MapReduce to call a different function and aggregate
我對 spark 非常不熟悉,但我很確定有一種好方法可以比我目前做的更快地做我想做的事情。
本質上,我有一個 S3 存儲桶,其中包含大量 JSON 的 Twitter 數據。 我想瀏覽所有這些文件,從 JSON 中獲取文本,對文本進行情感分析(目前使用斯坦福 NLP),然后將 Tweet + Sentiment 上傳到數據庫(現在我正在使用 dynamo,但是這個不是成敗)
我目前擁有的代碼是
/**
* 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());
}
}));
}
這有效並且很好。 我能夠通過在某些日期范圍內運行此代碼(即 getKeys 僅獲取某些日期范圍的密鑰)並在不同的 EC2 上運行此過程的許多實例,每個實例都作用於不同的日期范圍。
然而,必須有一種更快的方法來使用一個好的 ole map-reduce 來做到這一點,但我只是不知道如何開始研究這個。 是否可以在我的地圖中進行情緒分析,然后根據時間戳減少?
此外,我正在考慮使用 AWS Glue,但我沒有看到在那里使用斯坦福 NLP 庫的好方法。
任何和所有的幫助將不勝感激。
是的,您可以使用 Apache Spark 做到這一點。 有很多方法可以設計您的應用程序、配置基礎設施等。我提出一個簡單的設計:
您在 AWS 上,因此使用 Spark 創建 EMR 集群。 包含 Zeppelin 進行交互式調試會很有用。
Spark 使用多種數據抽象。 您的朋友是 RDD 和數據集(閱讀有關它們的文檔)。 讀取數據到 Datasets 的代碼可能是一樣的:
SparkSession ss = SparkSession.builder().getOrCreate(); Dataset<Row> dataset = ss.read("s3a://your_bucket/your_path");
現在你有一個Dataset<Row>
。 這對於類似 SQL 的操作很有用。 為了您的分析,您需要將其轉換為 Spark RDD:
JavaRDD<Tweet> analyticRdd = dataset.toJavaRDD().map(row -> { return TweetsFactory.tweetFromRow(row); });
因此,使用analyticRdd
您可以做您的分析人員。 只是不要忘記使所有使用數據的服務都可序列化。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.