作为概念证明,我正在构建这个非常简单的Twitter Friends抓取工具。以下是它的作用:
以下是我的代码到目前为止的样子:
def main( args:Array[String] ) {
scalar {
grid.execute(classOf[CrawlTask], "twitter-user-1").get
}
}
class CrawlTask extends GridTaskNoReduceSplitAdapter[String] {
def split( gridSize:Int, arg:String): Collection[GridJob] = {
val jobs:Collection[GridJob] = new ArrayList[GridJob]()
val initialCrawlJob = new CrawlJob()
initialCrawlJob.twitterId = arg
jobs.add(initialCrawlJob)
jobs
}
}
class CrawlJob extends GridJob {
var twitterId:String = new String()
def cancel() = {
println("cancel - " + twitterId)
}
def execute():Object = {
println("fetch friends for - " + twitterId)
// Fetch and execute CrawlJobs for all friends
return null
}
}
我为所有Twitter交互准备了Java服务。需要一些示例来确定如何在现有作业中创建新作业并将其与原始任务相关联。
谢谢| Srirangan
答案 0 :(得分:0)
我是如何解决这个问题的?
从概念上统一GridTasks和GridJobs。 MySpecialGridTask只能有一个MySpecialGridJob。
然后,很容易在Task或Job中执行新的GridTasks。
在上面的示例中:
class CrawlJob extends GridJob {
var twitterId:String = new String()
def cancel() = {
println("cancel - " + twitterId)
}
def execute():Object = {
println("fetch friends for - " + twitterId)
// Fetch and execute CrawlJobs for all friends
// Execute Job Here
grid.execute(classOf[CrawlTask], "twitter-user-2").get
grid.execute(classOf[CrawlTask], "twitter-user-3").get
return null
}
}