1

概念実証として、この非常にシンプルなTwitterフレンズクローラーを作成しています。これが何をするかです:

  1. Twitterアカウント「twitter-user-1」のCrawlJobを実行する
  2. 「twitter-user-1」の友達をすべて探す
  3. 「twitter-user-1」の友達全員にCrawlJobを実行する

これまでの私のコードは次のようになります。

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サービスを準備しています。既存のジョブ内に新しいジョブを作成し、それを元のタスクに関連付ける方法を理解するために、いくつかの例が必要です。

ありがとう| スリランガン

4

1 に答える 1

0

どうやってこれを回避したのですか?

概念的には、GridTasksとGridJobsを統合します。MySpecialGridTaskは、MySpecialGridJobを1つだけ持つことができます。

そうすれば、タスクまたはジョブで新しいGridTaskを簡単に実行できます。

上記の例では:

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
  }

}
于 2011-03-10T07:14:45.940 に答える