This is a *may* happen situation. In most cases you are fine.
When this can happen is:
pipe.group.sum.map { case (k, v) => (k, v*v) }.join(other)
in this case, since .map is not a method on Grouped, an implicit .toTypedPipe is inserted. But in this case you could have done:
pipe.group.sum.mapValues { v => v*v }.join(other)
in the latter case, since scalding can see the keys did not change, it can do everything in 1 map-reduce job. But in the former case, since it can't look inside functions, it can't see that the .map didn't change the keys.
So, it is always better to use the most constrained function you can (mapValues vs map, filter vs flatMap, etc...) and it is generally better if you want to compose in joins to avoid calling .toTypedPipe.
Since .toTypedPipe is implicit, you should never (or very rarely) need to explicitly call it.