Also, could we maybe make the SparkContext constructor take *only* a Config, and make the other ones be variants of it that pass default values for these properties? It would be great if all of these properties were settable through the Config. I guess preferredNodeLocationData is one that might not be, in which case we can have that as an extra thing.

In a similar way, some of the shorthand constructors (e.g. without preferredNodeLocationData or env) should be able to take a config in addition. Basically we want the recommended version to pass properties to Spark to always be a Config object. In the long term we may even create a builder for configs with convenience methods for common settings.