# Class for finding the median of a two-dimensional space

I have a simple static class that it's purpose is given an RDD of Point to find the median of each dimension and return that as a new Point using Spark's reduce functions.

This is the class:

public class MedianPointFinder {

public static Point findMedianPoint(JavaRDD<Point> points) {
Point biggestPointByXDimension = points.reduce((a, b) -> getBiggestPointByXDimension(a, b));
Point biggestPointByYDimension = points.reduce((a, b) -> getBiggestPointByYDimension(a, b));

double xDimensionMedian = biggestPointByXDimension.getX() / 2.0;
double yDimensionMedian = biggestPointByYDimension.getY() / 2.0;

return new Point(xDimensionMedian, yDimensionMedian);
}

private static Point getBiggestPointByXDimension(Point first, Point second) {
return first.getX() > second.getX() ? first : second;
}

private static Point getBiggestPointByYDimension(Point first, Point second) {
return first.getY() > second.getY() ? first : second;
}
}


Point class is a simple class for storing an (x, y) point.

• My understanding of median is the middle element out of N elements if the N elements were sorted. You are finding the highest element and dividing its value by 2. Is that what you really meant to do? For example, given three x coordinates 1 2 9 I consider the median to be 2 not 4.5. – JS1 Nov 28 '14 at 6:08

## 1 Answer

I guess your Point is not a java.awt.Point since that holds x and y as int and you're using double.

Why not getting rid of your Point class by making the "Finder" class itself a MedianPoint?

import java.awt.geom.Point2D;

public class MedianPoint extends Point2D.Double {

public MedianPoint(JavaRDD<Point> points) {
super(
/* your x calculation */,
/* your y calculation */
);
}

private static Point2D.Double greaterByXOf(Point2D.Double p1, Point2D.Double p2) {
// ...
}

private static Point2D.Double greaterByYOf(Point2D.Double p1, Point2D.Double p2) {
// ...
}

} // MedianPoint

• I do need my Point class for some methods that I have created in it that does not exist in Point2D but I guess what I could do is wrap Point2D with my Point class and then do MedianPoint extends Point. – Aki K Nov 26 '14 at 9:15
• Are there other reasons why you have to stick to Point? Which make moving Point's methods into MedianPoint impossible? – Gerold Broser Nov 26 '14 at 10:47
• No, not really. I just have it for providing a limited API and adding some functionality. I have posted my revised Point class here codereview.stackexchange.com/questions/70902/… – Aki K Nov 26 '14 at 11:21