Is there a way we can keep from using collect() here?

What if we combine the projections into a single projection and load each file once (instead of twice). Then we can use the "aggregate" method on the input1 and input2 rdds to create a SequenceRecord. This will push the processing the cluster and reduce the amount of data transferred to the driver (only the SequenceDictionaries will be returned).

Once you have the two SequenceDictionary objects, the rest of the code proceeds as you have it.

There are examples of using the aggregate method in a few places in the ADAM code for reference (e.g. FlagStat). One nice property of the aggregate method is that you can reuse the "left" object as you fold in the right which saves on object creation and improves performance (the FlagStat command doesn't use the feature right now).