{"action":"created","comment":{"url":"https://api.github.com/repos/Stratio/Sparta/pulls/comments/53004885","id":53004885,"diff_hunk":"@@ -71,214 +72,204 @@ object SparktaJob extends SLF4JLogging with SparktaSerializer {\n \n   lazy val ReflectionUtils = new ReflectionUtils\n \n-  def getSparkConfigs(policy: AggregationPoliciesModel, methodName: String, suffix: String,\n-                      refUtils: Option[ReflectionUtils] = None): Map[String, String] = {\n-    log.info(\"Initializing reflection\")\n-    policy.outputs.flatMap(o => {\n-      val clazzToInstance = ReflectionUtils.getClasspathMap.getOrElse(o.`type` + suffix, o.`type` + suffix)\n-      val clazz = Class.forName(clazzToInstance)\n-      clazz.getMethods.find(p => p.getName == methodName) match {\n-        case Some(method) => {\n-          method.setAccessible(true)\n-          method.invoke(clazz, o.configuration.asInstanceOf[Map[String, Serializable]])\n-            .asInstanceOf[Seq[(String, String)]]\n-        }\n-        case None => Seq()\n-      }\n-    }).toMap\n-  }\n-\n   def apply(policy: AggregationPoliciesModel): SparktaJob = new SparktaJob(policy)\n \n-  def logAndCreateEx(message: String, json: String, ex: Throwable, policyId: String, code: Int):\n-  IllegalArgumentException = {\n-    log.error(message)\n-    log.error(s\"JSON: $json\")\n-    ex.getCause match {\n-      case cause: ClassNotFoundException =>\n-        log.error(\"The component couldn't be found in classpath. Please check the type.\")\n-    }\n-    saveErrorZK(policyId, code)\n-    new IllegalArgumentException(message, ex)\n-  }\n-\n-  def saveErrorZK(policyId: String, code: Int): Unit = ErrorDAO().dao.create(policyId, code.toString)\n-\n-  def applyParsers(input: DStream[Event], parsers: Seq[Parser]): DStream[Event] = {\n-    if (parsers.isEmpty)\n-      input\n-    else {\n-      input.flatMap(event => executeParsers(event, parsers))\n-    }\n-  }\n-\n-  def executeParsers(event: Event, parsers: Seq[Parser]): Option[Event] =\n-    parsers.headOption.fold(Option(event)) {\n-      parser => {\n-        SparktaJob.parseEvent(event, parser).flatMap(eventParsed => executeParsers(eventParsed, parsers.drop(1)))\n-      }\n-    }\n-\n-  def parseEvent(event: Event, parser: Parser): Option[Event] = {\n-\n-    Try(parser.parse(event)) match {\n-      case Success(okEvent) => Some(okEvent)\n-      case Failure(exception) =>\n-        val error = s\"Failure[Parser]: ${event.toString} | Message: ${exception.getLocalizedMessage}\" +\n-          s\" | Parser: ${parser.getClass.getSimpleName}\"\n-        log.error(error, exception)\n-        None\n-    }\n-  }\n-\n   def getInput(policy: AggregationPoliciesModel, ssc: StreamingContext,\n-               refUtils: ReflectionUtils): DStream[Event] = {\n+               refUtils: ReflectionUtils): DStream[Row] = {\n     Try(createInput(policy, ssc, refUtils)) match {\n-      case Success(input) => {\n+      case Success(input) =>\n         log.debug(s\"Input: ${policy.input.get.`type`} created correctly.\")\n         input\n-      }\n-      case Failure(ex) => {\n+      case Failure(ex) =>\n         throw SparktaJob.logAndCreateEx(\n           s\"Something gone wrong creating the input: ${policy.input.get.name}. Please re-check the policy.\",\n           write(policy.input.get), ex, policy.id.get, ErrorCodes.Policy.ParsingInput)\n-      }\n     }\n   }\n \n   private def createInput(policy: AggregationPoliciesModel, ssc: StreamingContext,\n-                          refUtils: ReflectionUtils): DStream[Event] = {\n+                          refUtils: ReflectionUtils): DStream[Row] = {\n     require(policy.input.isDefined, \"You need at least one input in your policy\")\n     val inputInstance = refUtils.tryToInstantiate[Input](policy.input.get.`type` + Input.ClassSuffix, (c) =>\n       refUtils.instantiateParameterizable[Input](c, policy.input.get.configuration))\n     inputInstance.setUp(ssc, policy.storageLevel.get)\n   }\n \n-  def getParsers(policy: AggregationPoliciesModel, refUtils: ReflectionUtils): Seq[Parser] =\n-    policy.transformations.map(parser => createParser(parser, refUtils, policy.id.get))\n-\n-  private def createParser(model: TransformationsModel, refUtils: ReflectionUtils, policyId: String): Parser = {\n-    Try({\n+  def getParsers(policy: AggregationPoliciesModel,\n+                 refUtils: ReflectionUtils,\n+                 schemas: Map[String, StructType]): Seq[Parser] =\n+    policy.transformations.map(parser => createParser(parser, refUtils, policy.id.get, schemas))\n+\n+  private def createParser(model: TransformationsModel,\n+                           refUtils: ReflectionUtils,\n+                           policyId: String,\n+                           schemas: Map[String, StructType]): Parser = {\n+    Try {\n+      val outputFieldsNames = model.outputFieldsTransformed.map(_.name)\n+      val schema = schemas.getOrElse(model.name, throw new Exception(\"Can not find transformation schema\"))\n       refUtils.tryToInstantiate[Parser](model.`type` + Parser.ClassSuffix, (c) =>\n         c.getDeclaredConstructor(\n           classOf[String],\n           classOf[Integer],\n           classOf[String],\n           classOf[Seq[String]],\n+          classOf[StructType],\n           classOf[Map[String, Serializable]])\n-          .newInstance(model.name, model.order, model.inputField, model.outputFields, model.configuration)\n+          .newInstance(model.name, model.order, model.inputField, outputFieldsNames, schema, model.configuration)\n           .asInstanceOf[Parser])\n-    }\n-    ) match {\n-      case Success(transformer) => {\n+    } match {\n+      case Success(transformer) =>\n         log.debug(s\"Parser: ${model.`type`} created correctly.\")\n         transformer\n-      }\n-      case Failure(ex) => {\n+      case Failure(ex) =>\n         throw SparktaJob.logAndCreateEx(\n           s\"Something gone wrong creating the parser: ${model.`type`}. Please re-check the policy.\",\n           write(model), ex, policyId, ErrorCodes.Policy.ParsingParser)\n-      }\n     }\n   }\n \n-  private def createOperator(model: OperatorModel, refUtils: ReflectionUtils, policyId: String): Operator =\n+  def applyParsers(input: DStream[Row], parsers: Seq[Parser]): DStream[Row] = {\n+    if (parsers.isEmpty) input\n+    else input.flatMap(row => executeParsers(row, parsers))\n+  }\n+\n+  def executeParsers(row: Row, parsers: Seq[Parser]): Option[Row] =\n+    if (parsers.size == 1) parseEvent(row, parsers.head, true)\n+    else parseEvent(row, parsers.head).flatMap(eventParsed => executeParsers(eventParsed, parsers.drop(1)))\n+\n+  def parseEvent(row: Row, parser: Parser, removeRaw: Boolean = false): Option[Row] =\n+    Try(parser.parse(row, removeRaw)) match {\n+      case Success(okEvent) =>\n+        Some(okEvent)\n+      case Failure(exception) =>\n+        val error = s\"Failure[Parser]: ${row.mkString(\",\")} | Message: ${exception.getLocalizedMessage}\" +\n+          s\" | Parser: ${parser.getClass.getSimpleName}\"\n+        log.error(error, exception)\n+        None\n+    }\n+\n+  def getOperators(operatorsModel: Seq[OperatorModel],\n+                   refUtils: ReflectionUtils,\n+                   policyId: String,\n+                   initSchema: StructType): Seq[Operator] =\n+    operatorsModel.map(operator => createOperator(operator, refUtils, policyId, initSchema))\n+\n+  private def createOperator(model: OperatorModel,\n+                             refUtils: ReflectionUtils,\n+                             policyId: String,\n+                             initSchema: StructType): Operator =\n     Try(\n       refUtils.tryToInstantiate[Operator](model.`type` + Operator.ClassSuffix, (c) =>\n         c.getDeclaredConstructor(\n           classOf[String],\n-          classOf[Map[String, Serializable]]\n-        ).newInstance(model.name, model.configuration).asInstanceOf[Operator])\n+          classOf[StructType],\n+          classOf[Map[String, Serializable]])\n+          .newInstance(model.name, initSchema, model.configuration).asInstanceOf[Operator])\n     ) match {\n-      case Success(transformer) => {\n+      case Success(transformer) =>\n         log.debug(s\"Operator: ${model.`type`} created correctly.\")\n         transformer\n-      }\n-      case Failure(ex) => {\n+      case Failure(ex) =>\n         throw SparktaJob.logAndCreateEx(\n           s\"Something gone wrong creating the operator: ${model.`type`}. Please re-check the policy.\",\n           write(model), ex, policyId, ErrorCodes.Policy.ParsingOperator)\n-      }\n     }\n \n-  def getOperators(operatorsModel: Seq[OperatorModel], refUtils: ReflectionUtils, policyId: String): Seq[Operator] =\n-    operatorsModel.map(operator => createOperator(operator, refUtils, policyId))\n-\n-  def getOutputs(policy: AggregationPoliciesModel, cubesOperatorsSchema: Seq[TableSchema], refUtils: ReflectionUtils):\n-  Seq[Output] = policy.outputs.map(o => {\n+  def getOutputs(policy: AggregationPoliciesModel,\n+                 cubesOperatorsSchema: Seq[TableSchema],\n+                 refUtils: ReflectionUtils): Seq[Output] = policy.outputs.map(o => {\n     val schemasAssociated = cubesOperatorsSchema.filter(tableSchema => tableSchema.outputs.contains(o.name))\n     createOutput(o, schemasAssociated, refUtils, policy.version)\n   })\n \n   def createOutput(model: PolicyElementModel, schemasAssociated: Seq[TableSchema], refUtils: ReflectionUtils,\n-                   version: Option[Int]): Output = Try(\n-    refUtils.tryToInstantiate[Output](model.`type` + Output.ClassSuffix, (c) =>\n-      c.getDeclaredConstructor(\n-        classOf[String],\n-        classOf[Option[Int]],\n-        classOf[Map[String, Serializable]],\n-        classOf[Seq[TableSchema]])\n-        .newInstance(model.name, version, model.configuration, schemasAssociated)\n-        .asInstanceOf[Output])\n-  ) match {\n-    case Success(transformer) => {\n-      log.debug(s\"Output: ${model.`type`} created correctly.\")\n-      transformer\n-    }\n-    case Failure(ex) => {\n-      throw SparktaJob.logAndCreateEx(\n-        s\"Something gone wrong creating the output: ${model.`type`}. Please re-check the policy.\",\n-        write(model), ex, \"aa\", ErrorCodes.Policy.ParsingOutput)\n+                   version: Option[Int]): Output = {\n+    Try {\n+      refUtils.tryToInstantiate[Output](model.`type` + Output.ClassSuffix, (c) =>\n+        c.getDeclaredConstructor(\n+          classOf[String],\n+          classOf[Option[Int]],\n+          classOf[Map[String, Serializable]],\n+          classOf[Seq[TableSchema]])\n+          .newInstance(model.name, version, model.configuration, schemasAssociated)\n+          .asInstanceOf[Output])\n+    } match {\n+      case Success(transformer) =>\n+        log.debug(s\"Output: ${model.`type`} created correctly.\")\n+        transformer\n+      case Failure(ex) =>\n+        throw SparktaJob.logAndCreateEx(\n+          s\"Something gone wrong creating the output: ${model.`type`}. Please re-check the policy.\",\n+          write(model), ex, \"aa\", ErrorCodes.Policy.ParsingOutput)\n     }\n   }\n \n-  def getCubes(policy: AggregationPoliciesModel, refUtils: ReflectionUtils): Seq[Cube] = {\n+  def getCubes(policy: AggregationPoliciesModel,\n+               refUtils: ReflectionUtils,\n+               initSchema: StructType): Seq[Cube] = {\n     require(policy.cubes.nonEmpty, \"You need at least one cube in your policy\")\n-    policy.cubes.map(cube => createCube(cube, refUtils, policy.id.get))\n+    policy.cubes.map(cube => createCube(cube, refUtils, policy.id.get, initSchema: StructType))\n   }\n \n-  private def createCube(cube: CubeModel, refUtils: ReflectionUtils, policyId: String): Cube =\n-    Try({\n-      val name = cube.name.replaceAll(Output.Separator, \"\")\n+  private def createCube(cube: CubeModel,\n+                         refUtils: ReflectionUtils,\n+                         policyId: String,\n+                         initSchema: StructType): Cube =\n+    Try {\n+      val name = cube.name","path":"driver/src/main/scala/com/stratio/sparkta/driver/SparktaJob.scala","position":327,"original_position":327,"commit_id":"0b1ea5e205aef0ccbaa0c492e15c908d0c57e958","original_commit_id":"f351923872800f4109a6df4837109efcfbd34c26","user":{"login":"compae","id":8297897,"avatar_url":"https://avatars.githubusercontent.com/u/8297897?v=3","gravatar_id":"","url":"https://api.github.com/users/compae","html_url":"https://github.com/compae","followers_url":"https://api.github.com/users/compae/followers","following_url":"https://api.github.com/users/compae/following{/other_user}","gists_url":"https://api.github.com/users/compae/gists{/gist_id}","starred_url":"https://api.github.com/users/compae/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/compae/subscriptions","organizations_url":"https://api.github.com/users/compae/orgs","repos_url":"https://api.github.com/users/compae/repos","events_url":"https://api.github.com/users/compae/events{/privacy}","received_events_url":"https://api.github.com/users/compae/received_events","type":"User","site_admin":false},"body":"Magic Dark, I remove it","created_at":"2016-02-16T12:41:02Z","updated_at":"2016-02-16T12:41:02Z","html_url":"https://github.com/Stratio/Sparta/pull/1404#discussion_r53004885","pull_request_url":"https://api.github.com/repos/Stratio/Sparta/pulls/1404","_links":{"self":{"href":"https://api.github.com/repos/Stratio/Sparta/pulls/comments/53004885"},"html":{"href":"https://github.com/Stratio/Sparta/pull/1404#discussion_r53004885"},"pull_request":{"href":"https://api.github.com/repos/Stratio/Sparta/pulls/1404"}}},"pull_request":{"url":"https://api.github.com/repos/Stratio/Sparta/pulls/1404","id":59463018,"html_url":"https://github.com/Stratio/Sparta/pull/1404","diff_url":"https://github.com/Stratio/Sparta/pull/1404.diff","patch_url":"https://github.com/Stratio/Sparta/pull/1404.patch","issue_url":"https://api.github.com/repos/Stratio/Sparta/issues/1404","number":1404,"state":"open","locked":false,"title":"[SPARKTA-56]  Spark Row type as intputs and outputs","user":{"login":"compae","id":8297897,"avatar_url":"https://avatars.githubusercontent.com/u/8297897?v=3","gravatar_id":"","url":"https://api.github.com/users/compae","html_url":"https://github.com/compae","followers_url":"https://api.github.com/users/compae/followers","following_url":"https://api.github.com/users/compae/following{/other_user}","gists_url":"https://api.github.com/users/compae/gists{/gist_id}","starred_url":"https://api.github.com/users/compae/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/compae/subscriptions","organizations_url":"https://api.github.com/users/compae/orgs","repos_url":"https://api.github.com/users/compae/repos","events_url":"https://api.github.com/users/compae/events{/privacy}","received_events_url":"https://api.github.com/users/compae/received_events","type":"User","site_admin":false},"body":"#### Description\r\n\r\nBefore we work with Event types. This PR refactor all of it changing by Spark's Row.\r\nNow the code has better performance and it is cleaner than before.\r\n ","created_at":"2016-02-16T09:26:05Z","updated_at":"2016-02-16T12:41:02Z","closed_at":null,"merged_at":null,"merge_commit_sha":"c153cb2ae055bb6662780823dea2f54d11360fe8","assignee":{"login":"danielcsant","id":1497304,"avatar_url":"https://avatars.githubusercontent.com/u/1497304?v=3","gravatar_id":"","url":"https://api.github.com/users/danielcsant","html_url":"https://github.com/danielcsant","followers_url":"https://api.github.com/users/danielcsant/followers","following_url":"https://api.github.com/users/danielcsant/following{/other_user}","gists_url":"https://api.github.com/users/danielcsant/gists{/gist_id}","starred_url":"https://api.github.com/users/danielcsant/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/danielcsant/subscriptions","organizations_url":"https://api.github.com/users/danielcsant/orgs","repos_url":"https://api.github.com/users/danielcsant/repos","events_url":"https://api.github.com/users/danielcsant/events{/privacy}","received_events_url":"https://api.github.com/users/danielcsant/received_events","type":"User","site_admin":false},"milestone":null,"commits_url":"https://api.github.com/repos/Stratio/Sparta/pulls/1404/commits","review_comments_url":"https://api.github.com/repos/Stratio/Sparta/pulls/1404/comments","review_comment_url":"https://api.github.com/repos/Stratio/Sparta/pulls/comments{/number}","comments_url":"https://api.github.com/repos/Stratio/Sparta/issues/1404/comments","statuses_url":"https://api.github.com/repos/Stratio/Sparta/statuses/0b1ea5e205aef0ccbaa0c492e15c908d0c57e958","head":{"label":"Stratio:feature/generic-row","ref":"feature/generic-row","sha":"0b1ea5e205aef0ccbaa0c492e15c908d0c57e958","user":{"login":"Stratio","id":5228027,"avatar_url":"https://avatars.githubusercontent.com/u/5228027?v=3","gravatar_id":"","url":"https://api.github.com/users/Stratio","html_url":"https://github.com/Stratio","followers_url":"https://api.github.com/users/Stratio/followers","following_url":"https://api.github.com/users/Stratio/following{/other_user}","gists_url":"https://api.github.com/users/Stratio/gists{/gist_id}","starred_url":"https://api.github.com/users/Stratio/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Stratio/subscriptions","organizations_url":"https://api.github.com/users/Stratio/orgs","repos_url":"https://api.github.com/users/Stratio/repos","events_url":"https://api.github.com/users/Stratio/events{/privacy}","received_events_url":"https://api.github.com/users/Stratio/received_events","type":"Organization","site_admin":false},"repo":{"id":30288112,"name":"Sparta","full_name":"Stratio/Sparta","owner":{"login":"Stratio","id":5228027,"avatar_url":"https://avatars.githubusercontent.com/u/5228027?v=3","gravatar_id":"","url":"https://api.github.com/users/Stratio","html_url":"https://github.com/Stratio","followers_url":"https://api.github.com/users/Stratio/followers","following_url":"https://api.github.com/users/Stratio/following{/other_user}","gists_url":"https://api.github.com/users/Stratio/gists{/gist_id}","starred_url":"https://api.github.com/users/Stratio/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Stratio/subscriptions","organizations_url":"https://api.github.com/users/Stratio/orgs","repos_url":"https://api.github.com/users/Stratio/repos","events_url":"https://api.github.com/users/Stratio/events{/privacy}","received_events_url":"https://api.github.com/users/Stratio/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/Stratio/Sparta","description":"Real Time Aggregation based on Spark Streaming","fork":false,"url":"https://api.github.com/repos/Stratio/Sparta","forks_url":"https://api.github.com/repos/Stratio/Sparta/forks","keys_url":"https://api.github.com/repos/Stratio/Sparta/keys{/key_id}","collaborators_url":"https://api.github.com/repos/Stratio/Sparta/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/Stratio/Sparta/teams","hooks_url":"https://api.github.com/repos/Stratio/Sparta/hooks","issue_events_url":"https://api.github.com/repos/Stratio/Sparta/issues/events{/number}","events_url":"https://api.github.com/repos/Stratio/Sparta/events","assignees_url":"https://api.github.com/repos/Stratio/Sparta/assignees{/user}","branches_url":"https://api.github.com/repos/Stratio/Sparta/branches{/branch}","tags_url":"https://api.github.com/repos/Stratio/Sparta/tags","blobs_url":"https://api.github.com/repos/Stratio/Sparta/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/Stratio/Sparta/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/Stratio/Sparta/git/refs{/sha}","trees_url":"https://api.github.com/repos/Stratio/Sparta/git/trees{/sha}","statuses_url":"https://api.github.com/repos/Stratio/Sparta/statuses/{sha}","languages_url":"https://api.github.com/repos/Stratio/Sparta/languages","stargazers_url":"https://api.github.com/repos/Stratio/Sparta/stargazers","contributors_url":"https://api.github.com/repos/Stratio/Sparta/contributors","subscribers_url":"https://api.github.com/repos/Stratio/Sparta/subscribers","subscription_url":"https://api.github.com/repos/Stratio/Sparta/subscription","commits_url":"https://api.github.com/repos/Stratio/Sparta/commits{/sha}","git_commits_url":"https://api.github.com/repos/Stratio/Sparta/git/commits{/sha}","comments_url":"https://api.github.com/repos/Stratio/Sparta/comments{/number}","issue_comment_url":"https://api.github.com/repos/Stratio/Sparta/issues/comments{/number}","contents_url":"https://api.github.com/repos/Stratio/Sparta/contents/{+path}","compare_url":"https://api.github.com/repos/Stratio/Sparta/compare/{base}...{head}","merges_url":"https://api.github.com/repos/Stratio/Sparta/merges","archive_url":"https://api.github.com/repos/Stratio/Sparta/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/Stratio/Sparta/downloads","issues_url":"https://api.github.com/repos/Stratio/Sparta/issues{/number}","pulls_url":"https://api.github.com/repos/Stratio/Sparta/pulls{/number}","milestones_url":"https://api.github.com/repos/Stratio/Sparta/milestones{/number}","notifications_url":"https://api.github.com/repos/Stratio/Sparta/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/Stratio/Sparta/labels{/name}","releases_url":"https://api.github.com/repos/Stratio/Sparta/releases{/id}","deployments_url":"https://api.github.com/repos/Stratio/Sparta/deployments","created_at":"2015-02-04T08:04:40Z","updated_at":"2016-02-15T14:26:11Z","pushed_at":"2016-02-16T12:39:41Z","git_url":"git://github.com/Stratio/Sparta.git","ssh_url":"git@github.com:Stratio/Sparta.git","clone_url":"https://github.com/Stratio/Sparta.git","svn_url":"https://github.com/Stratio/Sparta","homepage":"http://www.stratio.com","size":32774,"stargazers_count":177,"watchers_count":177,"language":"Scala","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":39,"mirror_url":null,"open_issues_count":307,"forks":39,"open_issues":307,"watchers":177,"default_branch":"master"}},"base":{"label":"Stratio:master","ref":"master","sha":"05326ff2af722498f4e53a5b3fc49ac049bb14b6","user":{"login":"Stratio","id":5228027,"avatar_url":"https://avatars.githubusercontent.com/u/5228027?v=3","gravatar_id":"","url":"https://api.github.com/users/Stratio","html_url":"https://github.com/Stratio","followers_url":"https://api.github.com/users/Stratio/followers","following_url":"https://api.github.com/users/Stratio/following{/other_user}","gists_url":"https://api.github.com/users/Stratio/gists{/gist_id}","starred_url":"https://api.github.com/users/Stratio/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Stratio/subscriptions","organizations_url":"https://api.github.com/users/Stratio/orgs","repos_url":"https://api.github.com/users/Stratio/repos","events_url":"https://api.github.com/users/Stratio/events{/privacy}","received_events_url":"https://api.github.com/users/Stratio/received_events","type":"Organization","site_admin":false},"repo":{"id":30288112,"name":"Sparta","full_name":"Stratio/Sparta","owner":{"login":"Stratio","id":5228027,"avatar_url":"https://avatars.githubusercontent.com/u/5228027?v=3","gravatar_id":"","url":"https://api.github.com/users/Stratio","html_url":"https://github.com/Stratio","followers_url":"https://api.github.com/users/Stratio/followers","following_url":"https://api.github.com/users/Stratio/following{/other_user}","gists_url":"https://api.github.com/users/Stratio/gists{/gist_id}","starred_url":"https://api.github.com/users/Stratio/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Stratio/subscriptions","organizations_url":"https://api.github.com/users/Stratio/orgs","repos_url":"https://api.github.com/users/Stratio/repos","events_url":"https://api.github.com/users/Stratio/events{/privacy}","received_events_url":"https://api.github.com/users/Stratio/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/Stratio/Sparta","description":"Real Time Aggregation based on Spark Streaming","fork":false,"url":"https://api.github.com/repos/Stratio/Sparta","forks_url":"https://api.github.com/repos/Stratio/Sparta/forks","keys_url":"https://api.github.com/repos/Stratio/Sparta/keys{/key_id}","collaborators_url":"https://api.github.com/repos/Stratio/Sparta/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/Stratio/Sparta/teams","hooks_url":"https://api.github.com/repos/Stratio/Sparta/hooks","issue_events_url":"https://api.github.com/repos/Stratio/Sparta/issues/events{/number}","events_url":"https://api.github.com/repos/Stratio/Sparta/events","assignees_url":"https://api.github.com/repos/Stratio/Sparta/assignees{/user}","branches_url":"https://api.github.com/repos/Stratio/Sparta/branches{/branch}","tags_url":"https://api.github.com/repos/Stratio/Sparta/tags","blobs_url":"https://api.github.com/repos/Stratio/Sparta/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/Stratio/Sparta/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/Stratio/Sparta/git/refs{/sha}","trees_url":"https://api.github.com/repos/Stratio/Sparta/git/trees{/sha}","statuses_url":"https://api.github.com/repos/Stratio/Sparta/statuses/{sha}","languages_url":"https://api.github.com/repos/Stratio/Sparta/languages","stargazers_url":"https://api.github.com/repos/Stratio/Sparta/stargazers","contributors_url":"https://api.github.com/repos/Stratio/Sparta/contributors","subscribers_url":"https://api.github.com/repos/Stratio/Sparta/subscribers","subscription_url":"https://api.github.com/repos/Stratio/Sparta/subscription","commits_url":"https://api.github.com/repos/Stratio/Sparta/commits{/sha}","git_commits_url":"https://api.github.com/repos/Stratio/Sparta/git/commits{/sha}","comments_url":"https://api.github.com/repos/Stratio/Sparta/comments{/number}","issue_comment_url":"https://api.github.com/repos/Stratio/Sparta/issues/comments{/number}","contents_url":"https://api.github.com/repos/Stratio/Sparta/contents/{+path}","compare_url":"https://api.github.com/repos/Stratio/Sparta/compare/{base}...{head}","merges_url":"https://api.github.com/repos/Stratio/Sparta/merges","archive_url":"https://api.github.com/repos/Stratio/Sparta/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/Stratio/Sparta/downloads","issues_url":"https://api.github.com/repos/Stratio/Sparta/issues{/number}","pulls_url":"https://api.github.com/repos/Stratio/Sparta/pulls{/number}","milestones_url":"https://api.github.com/repos/Stratio/Sparta/milestones{/number}","notifications_url":"https://api.github.com/repos/Stratio/Sparta/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/Stratio/Sparta/labels{/name}","releases_url":"https://api.github.com/repos/Stratio/Sparta/releases{/id}","deployments_url":"https://api.github.com/repos/Stratio/Sparta/deployments","created_at":"2015-02-04T08:04:40Z","updated_at":"2016-02-15T14:26:11Z","pushed_at":"2016-02-16T12:39:41Z","git_url":"git://github.com/Stratio/Sparta.git","ssh_url":"git@github.com:Stratio/Sparta.git","clone_url":"https://github.com/Stratio/Sparta.git","svn_url":"https://github.com/Stratio/Sparta","homepage":"http://www.stratio.com","size":32774,"stargazers_count":177,"watchers_count":177,"language":"Scala","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":39,"mirror_url":null,"open_issues_count":307,"forks":39,"open_issues":307,"watchers":177,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/Stratio/Sparta/pulls/1404"},"html":{"href":"https://github.com/Stratio/Sparta/pull/1404"},"issue":{"href":"https://api.github.com/repos/Stratio/Sparta/issues/1404"},"comments":{"href":"https://api.github.com/repos/Stratio/Sparta/issues/1404/comments"},"review_comments":{"href":"https://api.github.com/repos/Stratio/Sparta/pulls/1404/comments"},"review_comment":{"href":"https://api.github.com/repos/Stratio/Sparta/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/Stratio/Sparta/pulls/1404/commits"},"statuses":{"href":"https://api.github.com/repos/Stratio/Sparta/statuses/0b1ea5e205aef0ccbaa0c492e15c908d0c57e958"}}}}