Hi Michael,
The problem I see is that you are calling altClassified.collect()
The problem with calling "collect" on an RDD is that it tries to materialize every element of the RDD as a collection in the executor JVM. This is fine if you've done reduce step or filtering to end up with a small-enough-for-memory element set, but if you are taking an RDD of tiles and calling collect (and thereby asking the driver to hold all of the uncompressed tiles in JVM heap space) you'll end up running out of memory. In your case, with the sizes you mention, I wonder if the JVM doesn't have that much memory or the sizes you give are compressed, because 1.5G isn't that much (as long as you set up the JVM to have an increased heap size). But in any case, code that "collects" on large RDD's isn't going to be scalable.
Instead of collecting the tiles, which would probably not be so useful, you could save them back to HDFS:
hc.save(LayerId("classified", 8), altClassified)
And then you could do things like pull individual tiles out to paint onto a web map. Or, you could do things like derive statistics:
altClassified.histogram
Let me know if that helps, or additional questions.
Cheers!
Rob