{"id":306,"date":"2015-04-28T08:47:20","date_gmt":"2015-04-28T08:47:20","guid":{"rendered":"http:\/\/blog.stratio.com\/?p=306"},"modified":"2023-09-20T13:43:21","modified_gmt":"2023-09-20T13:43:21","slug":"a-spark-based-analytics-solution-for-online-advertisers","status":"publish","type":"post","link":"https:\/\/www.stratio.com\/blog\/a-spark-based-analytics-solution-for-online-advertisers\/","title":{"rendered":"A Spark-based analytics solution for Online Advertisers"},"content":{"rendered":"<div>\n<div>\n<p style=\"text-align: justify;\">This post contains the winning solution for the Stratio challenge 2015 developed by Marco Piva, Leonardo Biagioli, Fabio Fantoni and Andrea De Marco (BitBang).<\/p>\n<p style=\"text-align: justify;\">The work describes the data model and the architecture of a Big Data Analytics solution that can help online advertisers to get fast answers for their analytical questions about impressions, clicks and purchases,basing on the Stratio Challenge requirements.<\/p>\n<p style=\"text-align: justify;\">The emphasis is placed on the technologies that have been used, with particular focus on Spark and Spray.<\/p>\n<\/div>\n<\/div>\n<p><!--more--><\/p>\n<div style=\"padding-top: 15px;\">\n<h2>Big Data analytics tools in Online Advertisement\u00a0<\/h2>\n<p style=\"text-align: justify;\">We&#8217;re living in a world of 24\/7 connectivity, accessing our content on our own terms, and we like it that way. Around the globe, 76% of respondents in a Nielsen online survey say they enjoy the freedom of being connected anywhere, anytime. While consumers love this flexibility, it represents a huge challenge for brands and online advertisers vying for our attention in a fragmented viewing arena.<\/p>\n<p style=\"text-align: justify;\">Online Advertising is a relatively new discipline, born in the early 1990s along with the rise of the World Wide Web. After a few years dominated by basic web banners displayed on the major web sites, online companies started to experiment and to consolidate multiple formats and strategies to advertise their products, also defining standards and best practices about display advertising, search engine marketing, etc. According to IAB Internet Advertising Revenue Report, Internet advertising revenues in the USA reached the high of $12.4 billion during the third quarter of 2014, with a year-over-year growth that is continuing since 2010.<\/p>\n<p style=\"text-align: justify;\">In this highly-demanding and ultra-competitive industry tools that support analysis and intelligence are essential: nobody wants to spend money on poor publishers, and every advertiser needs to have a scientific way to demonstrate how effective campaigns are in terms of ROAS (Return On Advertising Spending).<\/p>\n<p style=\"text-align: justify;\">Analytics tools are becoming more and more complex and sophisticated in order to provide valuable insights on the marketing activities and results.<\/p>\n<p>There are three major requirements for analytics tools today:<\/p>\n<div style=\"margin-top: 20px;\">\n<ol>\n<li>Real-time: queries must run on datasets that are updated in real-time;<\/li>\n<li>Volume: collected data are frequently quantified in terms of terabytes (TBs) if not petabytes (PBs) on a daily basis;<\/li>\n<li>Velocity: queries on very large datasets must return results in a short time, basing on business needs.<\/li>\n<\/ol>\n<\/div>\n<\/div>\n<div style=\"padding-top: 30px;\">\n<div style=\"font-weight: bold; font-size: 1.2em;\">Stratio Challenge requirements:<\/div>\n<div>The solution must meet the following requirements:<\/div>\n<ol>\n<li>Provide the number of impressions, clicks and purchases in a given timeframe;<\/li>\n<li>Provide the metrics at point 1. grouped by country, user-agent, campaign, advertiser or publisher;<\/li>\n<li>Provide combination of two or more of the dimensions above at point 2.;<\/li>\n<li>Receive queries and new data at the same time, without any impacts on performance;<\/li>\n<li>Have one hour as time granularity;<\/li>\n<\/ol>\n<\/div>\n<div style=\"padding-top: 30px;\">\n<div style=\"font-weight: bold; font-size: 1.2em;\">Data Model:<\/div>\n<div>Data are modelled using an Entity-Relationship diagram, along with an additional basic schema that includes the assumptions provided by the Stratio Challenge.<\/div>\n<div><a href=\"http:\/\/blog.stratio.com\/wp-content\/uploads\/2015\/04\/challenge_datamodel-1.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\" size-full wp-image-367 aligncenter\" src=\"http:\/\/blog.stratio.com\/wp-content\/uploads\/2015\/04\/challenge_datamodel-1.jpg\" alt=\"challenge_datamodel\" width=\"851\" height=\"791\" srcset=\"https:\/\/www.stratio.com\/blog\/wp-content\/uploads\/2015\/04\/challenge_datamodel-1.jpg 851w, https:\/\/www.stratio.com\/blog\/wp-content\/uploads\/2015\/04\/challenge_datamodel-1-300x279.jpg 300w, https:\/\/www.stratio.com\/blog\/wp-content\/uploads\/2015\/04\/challenge_datamodel-1-768x714.jpg 768w\" sizes=\"(max-width: 851px) 100vw, 851px\" \/><\/a><\/div>\n<div>\u00a0<\/div>\n<div style=\"text-align: justify;\">\u00a0<\/div>\n<div>\n<p style=\"text-align: justify;\">The Entity-Relationship diagram is designed using the composition relation (instead of aggregation) to emphasize the strong link between these three entities.<\/p>\n<p style=\"text-align: justify;\">Due to this choice, a Click could not exist without its &#8220;parent impression&#8221; in the same way a Purchase could not exist without its &#8220;parent Click&#8221;.<\/p>\n<p style=\"text-align: justify;\">Regarding to the cardinality, a single Impression can lead to multiple Clicks (0..N) but every Click must be generated by a single Impression (1..1); Click and Purchase are ruled by the same cardinality behavior.<\/p>\n<p style=\"text-align: justify;\">The following schema shows the assumptions that exist between Impression, Click and Purchase.<\/p>\n<\/div>\n<div><a href=\"http:\/\/blog.stratio.com\/wp-content\/uploads\/2015\/04\/challenge_figure2-1.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\" size-full wp-image-341 aligncenter\" src=\"http:\/\/blog.stratio.com\/wp-content\/uploads\/2015\/04\/challenge_figure2-1.jpg\" alt=\"challenge_figure2\" width=\"919\" height=\"343\" \/><\/a><\/div>\n<div>\u00a0<\/div>\n<div>\u00a0<\/div>\n<\/div>\n<div>\n<div style=\"font-weight: bold; font-size: 1.2em;\">Architecture:<\/div>\n<div>The main technologies used to build the architecture are the following:<\/div>\n<ul>\n<li>Akka\n<ul>\n<li>asynchronous and distributed design;<\/li>\n<li>remote and\/or local supervisor hierarchies;<\/li>\n<li>actors are lightweight;<\/li>\n<\/ul>\n<\/li>\n<li>Spray\n<ul>\n<li>flexible, asynchronous and actor-based REST API on top of Akka;<\/li>\n<\/ul>\n<\/li>\n<li>HDFS\n<ul>\n<li>distributed and fault tolerant file system;<\/li>\n<\/ul>\n<\/li>\n<li>Spark\n<ul>\n<li>Spark Streaming\n<ul>\n<li>can handle Akka actors messages;<\/li>\n<li>provides window based operation for real-time analytics;<\/li>\n<\/ul>\n<\/li>\n<li>Spark Engine\n<ul>\n<li>process data in-memory for batch based analysis;<\/li>\n<\/ul>\n<\/li>\n<li>Spark SQL\n<ul>\n<li>engine for interactive or long queries;<\/li>\n<li>provides JDBC and ODBC connectivity;<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<div style=\"padding-top: 25px;\">The solution can be built in Scala language upon Akka, Spray and Spark libraries.<\/div>\n<div style=\"padding-top: 25px; text-align: justify;\">Spray provides the ability to create a flexible, asynchronous and actor-based REST API, so the HTTP embedded server spray-can can be used to handle impression, click and purchase data and the solution can take advantage of the Spray\u2019s routing DSL to describe the behaviour of the API.<\/div>\n<div style=\"padding-top: 25px; text-align: justify;\">Every single event received by the Spray server is sent as a message from an Akka actor to the Spark streaming context: in this way the solution can exploit Akka\u2019s actor main features like the asynchronous, distributed and lightweight design and the possibility to create remote and local hierarchies.<\/div>\n<div style=\"padding-top: 25px; text-align: justify;\">Spark Streaming produces a stream of RDDs (DStream) and provides the possibility to execute window-based operations on these; the solution can perform real-time analysis through Spark SQL queries without the need to wait for long processing times.<\/div>\n<div style=\"padding-top: 25px; text-align: justify;\">At the same time each RDD coming from the stream is stored into a HDFS storage layer that allows to execute batch processing jobs for more complex analysis. Here the assumptions provided by the Stratio Challenge (maximum 6 hours between impression and click, 1 month between click and purchase) are applied using Spark core functions.<br \/>Spark thrift server functionality can also be used to allow external tools to create some data visualization.<\/div>\n<div style=\"padding-top: 25px;\"><a href=\"http:\/\/blog.stratio.com\/wp-content\/uploads\/2015\/04\/challenge_figure3-1.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\" size-full wp-image-364 aligncenter\" src=\"http:\/\/blog.stratio.com\/wp-content\/uploads\/2015\/04\/challenge_figure3-1.jpg\" alt=\"challenge_figure3\" width=\"1010\" height=\"513\" srcset=\"https:\/\/www.stratio.com\/blog\/wp-content\/uploads\/2015\/04\/challenge_figure3-1.jpg 1010w, https:\/\/www.stratio.com\/blog\/wp-content\/uploads\/2015\/04\/challenge_figure3-1-300x152.jpg 300w, https:\/\/www.stratio.com\/blog\/wp-content\/uploads\/2015\/04\/challenge_figure3-1-768x390.jpg 768w\" sizes=\"(max-width: 1010px) 100vw, 1010px\" \/><\/a><\/div>\n<\/div>\n<div style=\"padding-top: 30px;\">\n<div style=\"font-weight: bold; font-size: 1.2em;\">Code snippets:<\/div>\n<div>Spray route example for Impression API:<\/div>\n<div>\n<pre class=\"lang:default decode:true \">implicit val system = ActorSystem(\"LocalSystem\")\nval localActor = system.actorOf(Props[LocalActor], name = \"LocalActor\")\nlocalActor ! \"START\"\n\nstartServer(\"localhost\", port = 8082) {\n    get {\n        path(\"api\") {\n        parameters('id_impression, 'country, 'campaign, 'advertiser, 'publisher) { (id_impression, country, campaign, advertiser, publisher) =&gt;\n           val timestamp = Calendar.getInstance().getTime()\n           localActor ! s\"$id_impression,$country,$campaign,$advertiser,$publisher,$timestamp\"\n           complete(s\"Sample impression response\")\n        }\n      }\n   }\n}<\/pre>\n<\/div>\n<div style=\"padding-top: 30px;\">\n<div>API server actor class:<\/div>\n<div>\n<pre class=\"lang:default decode:true \">class LocalActor extends Actor {\n    val remote = \ncontext.actorSelection(\"akka.tcp:\/\/sparkDriver@SparkMaster:7777\/user\/Supervisor0\/receiver\")\n   def receive = {\n       case \"START\" =&gt;\n             remote ! \"Spray API server has started\"\n       case msg: String =&gt;\n             remote ! s\"$msg\"\n  }\n}<\/pre>\n<\/div>\n<\/div>\n<div style=\"padding-top: 30px;\">\n<div>Window-based operation on DStream:<\/div>\n<div>\n<pre class=\"lang:default decode:true \">val ssc = new StreamingContext(conf, Seconds(30))\nval actorName = \"receiver\"\nval actorStream = ssc.actorStream[String](Props[Receiver], actorName)\n\/\/ window based operations\nval impressions = actorStream.window(Seconds(600), Seconds(30))\nimpressions.foreachRDD((rdd: RDD[String]) =&gt; {\n   \/\/ some RDD operation for each window\n}\n)\n<\/pre>\n<\/div>\n<\/div>\n<div style=\"padding-top: 30px;\">\n<div>Simple example of batch based analysis (clicks per country):<\/div>\n<div>\n<pre class=\"lang:default decode:true \">val impressions = impressionData.map(x =&gt; \n(x.split(';').lift(0).get,x.split(';').lift(1).get,x.split(';').lift(2).get))\n .map({case (impressionId,country,timestamp) =&gt; (impressionId)-&gt;(impressionId,country,timestamp)})\n\nval clicks = clickData.map(x =&gt; \n(x.split(';').lift(0).get,x.split(';').lift(1).get,x.split(';').lift(2).get))\n .map({case (clickId,timestamp,impressionId) =&gt; (impressionId) -&gt; (clickId,timestamp,impres-\nsionId)})\n\nval joined = impressions.join(clicks).map(x=&gt;x._2)\n\nval resultByCountry = joined.map(x =&gt; (x._1.productElement(2) \n ,getMinutesDiff(x._1.productElement(3).toString,x._2.productElement(1).toString)))\n .filter(x =&gt; x._2 &lt;= 360) \/\/ 6 hours interval filter\n .countByKey()\n<\/pre>\n<\/div>\n<\/div>\n<div style=\"padding-top: 30px;\">\n<div style=\"font-weight: bold; font-size: 1.2em; text-align: justify;\">Conclusions:<\/div>\n<div style=\"text-align: justify;\">The proposed solution is effectively solving the data management and analytics problem introduced by the competition.<\/div>\n<div style=\"text-align: justify;\">The architecture described above allows analysts to perform their analysis without waiting for many hours of data processing, and also makes them free to choose between real time analysis (e.g. for ads performance monitoring), and batch-based analysis that leverage on much more complex queries.<\/div>\n<\/div>\n<div style=\"padding-top: 30px;\">\n<div style=\"font-weight: bold; font-size: 1.2em; text-align: justify;\">Next steps:<\/div>\n<div style=\"text-align: justify;\">The following optimizations and technologies might be evaluated to extend the efficiency and the reliability of the solution:<\/div>\n<ul>\n<li style=\"text-align: justify;\">Fine tuning of Spark jobs: to pick the most efficient actions and transformations in terms of computational performance;<\/li>\n<li style=\"text-align: justify;\">Apache Kafka or Apache Flume: to add durability and reliability to data collected through the APIs.<\/li>\n<\/ul>\n<\/div>\n<\/div>\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>This post contains the winning solution for the Stratio challenge 2015 developed by Marco Piva, Leonardo Biagioli, Fabio Fantoni and Andrea De Marco (BitBang).<\/p>\n","protected":false},"author":1,"featured_media":889,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[686],"tags":[],"ppma_author":[795],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v22.9 (Yoast SEO v22.9) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>A Spark-based analytics solution for Online Advertisers<\/title>\n<meta name=\"description\" content=\"Discover a Big Data Analytics solution that can help online advertisers to get faster answers about impressions, clicks and purchases thanks to Spark.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.stratio.com\/blog\/a-spark-based-analytics-solution-for-online-advertisers\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"A Spark-based analytics solution for Online Advertisers\" \/>\n<meta property=\"og:description\" content=\"Discover a Big Data Analytics solution that can help online advertisers to get faster answers about impressions, clicks and purchases thanks to Spark.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.stratio.com\/blog\/a-spark-based-analytics-solution-for-online-advertisers\/\" \/>\n<meta property=\"og:site_name\" content=\"Stratio\" \/>\n<meta property=\"article:published_time\" content=\"2015-04-28T08:47:20+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-09-20T13:43:21+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.stratio.com\/blog\/wp-content\/uploads\/2015\/04\/solution.png\" \/>\n\t<meta property=\"og:image:width\" content=\"730\" \/>\n\t<meta property=\"og:image:height\" content=\"312\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Stratio\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@stratiobd\" \/>\n<meta name=\"twitter:site\" content=\"@stratiobd\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Stratio\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.stratio.com\/blog\/a-spark-based-analytics-solution-for-online-advertisers\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.stratio.com\/blog\/a-spark-based-analytics-solution-for-online-advertisers\/\"},\"author\":{\"name\":\"Stratio\",\"@id\":\"https:\/\/www.stratio.com\/blog\/#\/schema\/person\/d0377b199cd052b17e15c9ba44c45ab7\"},\"headline\":\"A Spark-based analytics solution for Online Advertisers\",\"datePublished\":\"2015-04-28T08:47:20+00:00\",\"dateModified\":\"2023-09-20T13:43:21+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.stratio.com\/blog\/a-spark-based-analytics-solution-for-online-advertisers\/\"},\"wordCount\":1003,\"publisher\":{\"@id\":\"https:\/\/www.stratio.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.stratio.com\/blog\/a-spark-based-analytics-solution-for-online-advertisers\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.stratio.com\/blog\/wp-content\/uploads\/2015\/04\/solution.png\",\"articleSection\":[\"Product\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.stratio.com\/blog\/a-spark-based-analytics-solution-for-online-advertisers\/\",\"url\":\"https:\/\/www.stratio.com\/blog\/a-spark-based-analytics-solution-for-online-advertisers\/\",\"name\":\"A Spark-based analytics solution for Online Advertisers\",\"isPartOf\":{\"@id\":\"https:\/\/www.stratio.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.stratio.com\/blog\/a-spark-based-analytics-solution-for-online-advertisers\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.stratio.com\/blog\/a-spark-based-analytics-solution-for-online-advertisers\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.stratio.com\/blog\/wp-content\/uploads\/2015\/04\/solution.png\",\"datePublished\":\"2015-04-28T08:47:20+00:00\",\"dateModified\":\"2023-09-20T13:43:21+00:00\",\"description\":\"Discover a Big Data Analytics solution that can help online advertisers to get faster answers about impressions, clicks and purchases thanks to Spark.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.stratio.com\/blog\/a-spark-based-analytics-solution-for-online-advertisers\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.stratio.com\/blog\/a-spark-based-analytics-solution-for-online-advertisers\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.stratio.com\/blog\/a-spark-based-analytics-solution-for-online-advertisers\/#primaryimage\",\"url\":\"https:\/\/www.stratio.com\/blog\/wp-content\/uploads\/2015\/04\/solution.png\",\"contentUrl\":\"https:\/\/www.stratio.com\/blog\/wp-content\/uploads\/2015\/04\/solution.png\",\"width\":730,\"height\":312},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.stratio.com\/blog\/a-spark-based-analytics-solution-for-online-advertisers\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.stratio.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"A Spark-based analytics solution for Online Advertisers\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.stratio.com\/blog\/#website\",\"url\":\"https:\/\/www.stratio.com\/blog\/\",\"name\":\"Stratio Blog\",\"description\":\"Corporate blog\",\"publisher\":{\"@id\":\"https:\/\/www.stratio.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.stratio.com\/blog\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.stratio.com\/blog\/#organization\",\"name\":\"Stratio\",\"url\":\"https:\/\/www.stratio.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.stratio.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/stratio.com\/blog\/wp-content\/uploads\/2020\/06\/stratio-web-logo-1.png\",\"contentUrl\":\"https:\/\/stratio.com\/blog\/wp-content\/uploads\/2020\/06\/stratio-web-logo-1.png\",\"width\":260,\"height\":55,\"caption\":\"Stratio\"},\"image\":{\"@id\":\"https:\/\/www.stratio.com\/blog\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/x.com\/stratiobd\",\"https:\/\/es.linkedin.com\/company\/stratiobd\",\"https:\/\/www.youtube.com\/c\/StratioBD\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.stratio.com\/blog\/#\/schema\/person\/d0377b199cd052b17e15c9ba44c45ab7\",\"name\":\"Stratio\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.stratio.com\/blog\/#\/schema\/person\/image\/bb38888f58c2bb664646155f78ae6ccc\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/e3387ad00609f34a56d6796400eb8191?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/e3387ad00609f34a56d6796400eb8191?s=96&d=mm&r=g\",\"caption\":\"Stratio\"},\"description\":\"Stratio guides businesses on their journey through complete #DigitalTransformation with #BigData and #AI. Stratio works worldwide for large companies and multinationals in the sectors of banking, insurance, healthcare, telco, retail, energy and media.\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"A Spark-based analytics solution for Online Advertisers","description":"Discover a Big Data Analytics solution that can help online advertisers to get faster answers about impressions, clicks and purchases thanks to Spark.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.stratio.com\/blog\/a-spark-based-analytics-solution-for-online-advertisers\/","og_locale":"en_US","og_type":"article","og_title":"A Spark-based analytics solution for Online Advertisers","og_description":"Discover a Big Data Analytics solution that can help online advertisers to get faster answers about impressions, clicks and purchases thanks to Spark.","og_url":"https:\/\/www.stratio.com\/blog\/a-spark-based-analytics-solution-for-online-advertisers\/","og_site_name":"Stratio","article_published_time":"2015-04-28T08:47:20+00:00","article_modified_time":"2023-09-20T13:43:21+00:00","og_image":[{"width":730,"height":312,"url":"https:\/\/www.stratio.com\/blog\/wp-content\/uploads\/2015\/04\/solution.png","type":"image\/png"}],"author":"Stratio","twitter_card":"summary_large_image","twitter_creator":"@stratiobd","twitter_site":"@stratiobd","twitter_misc":{"Written by":"Stratio","Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.stratio.com\/blog\/a-spark-based-analytics-solution-for-online-advertisers\/#article","isPartOf":{"@id":"https:\/\/www.stratio.com\/blog\/a-spark-based-analytics-solution-for-online-advertisers\/"},"author":{"name":"Stratio","@id":"https:\/\/www.stratio.com\/blog\/#\/schema\/person\/d0377b199cd052b17e15c9ba44c45ab7"},"headline":"A Spark-based analytics solution for Online Advertisers","datePublished":"2015-04-28T08:47:20+00:00","dateModified":"2023-09-20T13:43:21+00:00","mainEntityOfPage":{"@id":"https:\/\/www.stratio.com\/blog\/a-spark-based-analytics-solution-for-online-advertisers\/"},"wordCount":1003,"publisher":{"@id":"https:\/\/www.stratio.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.stratio.com\/blog\/a-spark-based-analytics-solution-for-online-advertisers\/#primaryimage"},"thumbnailUrl":"https:\/\/www.stratio.com\/blog\/wp-content\/uploads\/2015\/04\/solution.png","articleSection":["Product"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.stratio.com\/blog\/a-spark-based-analytics-solution-for-online-advertisers\/","url":"https:\/\/www.stratio.com\/blog\/a-spark-based-analytics-solution-for-online-advertisers\/","name":"A Spark-based analytics solution for Online Advertisers","isPartOf":{"@id":"https:\/\/www.stratio.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.stratio.com\/blog\/a-spark-based-analytics-solution-for-online-advertisers\/#primaryimage"},"image":{"@id":"https:\/\/www.stratio.com\/blog\/a-spark-based-analytics-solution-for-online-advertisers\/#primaryimage"},"thumbnailUrl":"https:\/\/www.stratio.com\/blog\/wp-content\/uploads\/2015\/04\/solution.png","datePublished":"2015-04-28T08:47:20+00:00","dateModified":"2023-09-20T13:43:21+00:00","description":"Discover a Big Data Analytics solution that can help online advertisers to get faster answers about impressions, clicks and purchases thanks to Spark.","breadcrumb":{"@id":"https:\/\/www.stratio.com\/blog\/a-spark-based-analytics-solution-for-online-advertisers\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.stratio.com\/blog\/a-spark-based-analytics-solution-for-online-advertisers\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.stratio.com\/blog\/a-spark-based-analytics-solution-for-online-advertisers\/#primaryimage","url":"https:\/\/www.stratio.com\/blog\/wp-content\/uploads\/2015\/04\/solution.png","contentUrl":"https:\/\/www.stratio.com\/blog\/wp-content\/uploads\/2015\/04\/solution.png","width":730,"height":312},{"@type":"BreadcrumbList","@id":"https:\/\/www.stratio.com\/blog\/a-spark-based-analytics-solution-for-online-advertisers\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.stratio.com\/blog\/"},{"@type":"ListItem","position":2,"name":"A Spark-based analytics solution for Online Advertisers"}]},{"@type":"WebSite","@id":"https:\/\/www.stratio.com\/blog\/#website","url":"https:\/\/www.stratio.com\/blog\/","name":"Stratio Blog","description":"Corporate blog","publisher":{"@id":"https:\/\/www.stratio.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.stratio.com\/blog\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.stratio.com\/blog\/#organization","name":"Stratio","url":"https:\/\/www.stratio.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.stratio.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/stratio.com\/blog\/wp-content\/uploads\/2020\/06\/stratio-web-logo-1.png","contentUrl":"https:\/\/stratio.com\/blog\/wp-content\/uploads\/2020\/06\/stratio-web-logo-1.png","width":260,"height":55,"caption":"Stratio"},"image":{"@id":"https:\/\/www.stratio.com\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/x.com\/stratiobd","https:\/\/es.linkedin.com\/company\/stratiobd","https:\/\/www.youtube.com\/c\/StratioBD"]},{"@type":"Person","@id":"https:\/\/www.stratio.com\/blog\/#\/schema\/person\/d0377b199cd052b17e15c9ba44c45ab7","name":"Stratio","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.stratio.com\/blog\/#\/schema\/person\/image\/bb38888f58c2bb664646155f78ae6ccc","url":"https:\/\/secure.gravatar.com\/avatar\/e3387ad00609f34a56d6796400eb8191?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/e3387ad00609f34a56d6796400eb8191?s=96&d=mm&r=g","caption":"Stratio"},"description":"Stratio guides businesses on their journey through complete #DigitalTransformation with #BigData and #AI. Stratio works worldwide for large companies and multinationals in the sectors of banking, insurance, healthcare, telco, retail, energy and media."}]}},"authors":[{"term_id":795,"user_id":1,"is_guest":0,"slug":"stratioadmin","display_name":"Stratio","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/e3387ad00609f34a56d6796400eb8191?s=96&d=mm&r=g","author_category":"","first_name":"","last_name":"","user_url":"","job_title":"","description":"Stratio guides businesses on their journey through complete #DigitalTransformation with #BigData and #AI. Stratio works worldwide for large companies and multinationals in the sectors of banking, insurance, healthcare, telco, retail, energy and media."}],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.stratio.com\/blog\/wp-json\/wp\/v2\/posts\/306"}],"collection":[{"href":"https:\/\/www.stratio.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.stratio.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.stratio.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.stratio.com\/blog\/wp-json\/wp\/v2\/comments?post=306"}],"version-history":[{"count":15,"href":"https:\/\/www.stratio.com\/blog\/wp-json\/wp\/v2\/posts\/306\/revisions"}],"predecessor-version":[{"id":13924,"href":"https:\/\/www.stratio.com\/blog\/wp-json\/wp\/v2\/posts\/306\/revisions\/13924"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.stratio.com\/blog\/wp-json\/wp\/v2\/media\/889"}],"wp:attachment":[{"href":"https:\/\/www.stratio.com\/blog\/wp-json\/wp\/v2\/media?parent=306"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.stratio.com\/blog\/wp-json\/wp\/v2\/categories?post=306"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.stratio.com\/blog\/wp-json\/wp\/v2\/tags?post=306"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.stratio.com\/blog\/wp-json\/wp\/v2\/ppma_author?post=306"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}