Oh, you are right.  The base impl is probably lazy too.  The distinction I was trying to make is that while normal RDD operations are lazy, they are not holistically optimized before execution.  Where as if we create a logical operator and defer the creation of RDDs, there may be some extra chances for optimization (at some point in the future).  We definitely want to override the base impl, but we don't need to have multiple redundant methods for creating samples.

Also note that you might need to sync with the changes being made in #462 .