[ 
https://issues.apache.org/jira/browse/HIVE-1397?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Mayank Lahiri updated HIVE-1397:
--------------------------------

    Attachment: Histogram_quality.png.jpg

Since there is no approximation guarantee with this streaming algorithm, I ran 
a pretty comprehensive set of experiments to determine what the quality of the 
computed histogram is in terms of Mean-Squared-Error, and using R's hist() 
function as a gold standard.

I simulated a variety of conditions on the data and the Map/Reduce setup. To 
summarize, I ran multiple repetitions of histogram-building using the UDAF and 
R on the cross product:

 {chunks of sorted data to each mapper, semi-sorted data to each mapper, random 
data to each mapper} x
 { few mappers relative to data size, medium number of mappers, very high 
number of mappers } x
 { 10 - 80 histogram bins in steps of 10 }

The image shows the MSE of the UDAF histogram() as a function of R's histogram 
for the same number of bins. A value of 1.0 means that Hive and R histograms 
are on par. Values less than 1.0 mean that Hive histogram is actually *better* 
than R's histogram, in terms of MSE.

At 30 and 60 bins, the MSEs of both R and Hive are very small, and the 
discrepancy seems to be R doing something funky at those points.

In summary, it looks pretty good!

> histogram() UDAF for a numerical column
> ---------------------------------------
>
>                 Key: HIVE-1397
>                 URL: https://issues.apache.org/jira/browse/HIVE-1397
>             Project: Hadoop Hive
>          Issue Type: New Feature
>          Components: Query Processor
>    Affects Versions: 0.6.0
>            Reporter: Mayank Lahiri
>            Assignee: Mayank Lahiri
>             Fix For: 0.6.0
>
>         Attachments: Histogram_quality.png.jpg, HIVE-1397.1.patch
>
>
> A histogram() UDAF to generate an approximate histogram of a numerical (byte, 
> short, double, long, etc.) column. The result is returned as a map of (x,y) 
> histogram pairs, and can be plotted in Gnuplot using impulses (for example). 
> The algorithm is currently adapted from "A streaming parallel decision tree 
> algorithm" by Ben-Haim and Tom-Tov, JMLR 11 (2010), and uses space 
> proportional to the number of histogram bins specified. It has no 
> approximation guarantees, but seems to work well when there is a lot of data 
> and a large number (e.g. 50-100) of histogram bins specified.
> A typical call might be:
> SELECT histogram(val, 10) FROM some_table;
> where the result would be a histogram with 10 bins, returned as a Hive map 
> object.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to