Build a Data Pipeline with Qubole
We get many questions about how Qubole makes data science easy. The one-line answer is – we have developed a number of features to help with all stages in a data pipeline’s lifecycle – import data, analyze, visualize and deploy to production. However, the best way to answer these questions is by letting the product talk. We have created a demo to showcase how Qubole lowers the barrier to leveraging the power of Apache Hive with Hadoop.
Wikimedia, the organization behind Wikipedia publishes the page views of each topic, every hour of the day. From the page views, trending topics i.e. those topics with sudden jumps in page views can be found. We are not the first ones to attempt such an exercise. Data Wrangling has documented a previous attempt here.
We have also deployed a rails app to visualize the results at https://demotrends.qubole.com. The code for the rails app is available on Github.
Requirements to run the demo
- Qubole Trial Plan
- An Amazon Web Services account
- Qubole Free Plan
On the Wikimedia website, the data is partitioned by year followed by month. There is one directory per year starting from 2007. Each year has one directory per month. For e.g. in the year 2013, there are directories named
Each month directory has one file for every hour of a day. For e.g.
- pagecounts-20130701-000000.gz, size 85M
- pagecounts-20130701-010000.gz, size 85M
- pagecounts-20130701-020000.gz, size 81M
- pagecounts-20130701-030000.gz, size 80M
- pagecounts-20130701-040000.gz, size 80M
- pagecounts-20130704-110000.gz, size 95M
- pagecounts-20130704-120000.gz, size 95M
- pagecounts-20130704-130000.gz, size 99M
- pagecounts-20130704-140000.gz, size 99M
- pagecounts-20130704-150000.gz, size 99M
Let’s take a peek at the page count data feed. Each row ends with a new line ‘\n’. There are 4 columns in each row and the columns are separated by a space.
|Group||A category is chosen by Wikipedia.|
|Title||Name of the topic|
|Page Views||No. of views of each topic in an hour|
|Bytes Sent||No. of bytes served by the server in an hour|
A sample of the rows are:
|Group||Title||Page Views||Bytes Sent|
The page titles in a row can be synonyms. For e.g. “Bhart”, “Al_Hind” and “India” redirect to the same Article of India on Wikipedia, ie these 3 are synonyms and Wikipedia keeps track of synonyms. Wikipedia calls the synonym page titles “Redirect Titles”.
The page visit count data that we discussed above gives info about page visits for “Bhart”, “Al_Hind” and “India” separately. To get the actual page visit count of “India” we need to aggregate the data for all synonyms/Redirect titles for “India”. Wikipedia publishes the data about page synonyms in form of 2 dimension tables.
|Page Id||Page Title|
|Redirect from||Page Title|
Page Table has an entry for each page that exists in the wiki. The redirect table has an entry for only redirect page ids. We need to join these two tables to get a lookup table.
|Redirect Id||Redirect Title||True Title||True Id|
We can then use this lookup table to find the True Title for any redirect table.
The final output exported to the web app looks like
|Date||Title||Monthly Trend||Daily Trend|
The data pipeline is visualized in the flowchart shown above. There are four distinct parts:
- Import and clean up Pagecount
- Import and join Pages & Redirect tables to create a lookup table.
- Resolve Synonyms and calculate trend ranks for each topic.
- Export the results to the web app database.
In the second part of the blog series, we’ll describe the ETL steps required to process the raw data.
In the third part, we’ll describe the analysis and export steps.