SQLContext.prototype.createExternalTable = function (tableName, path, source, options, schema) {
     var javaObject;
     if (tableName && path && !source && !options && !schema) {
         javaObject = this.getJavaObject().createExternalTable(tableName, path);
     } else if (tableName && path && source && !options && !schema) {
         javaObject = this.getJavaObject().createExternalTable(tableName, path, source);
     } else if (tableName && source && options && !schema) {
         var options_uw = Utils.createJavaHashMap(options);
         javaObject = this.getJavaObject().createExternalTable(tableName, source, options_uw);
     } else if (tableName && source && options && schema) {
         var options_uw = Utils.createJavaHashMap(options);
         var schema_uw = Utils.unwrapObject(schema);
         javaObject = this.getJavaObject().createExternalTable(tableName, source, schema_uw, options_uw);
     }
     return Utils.javaToJs(javaObject);
 };
    RandomForest.trainClassifier = function (input,
                                             numClasses,
                                             categoricalFeaturesInfo,
                                             numTrees,
                                             featureSubsetStrategy,
                                             impurity,
                                             maxDepth,
                                             maxBins,
                                             seed) {

        var categoricalFeaturesInfo_uw = Utils.createJavaHashMap(categoricalFeaturesInfo);
        var javaObject = org.apache.spark.mllib.tree.RandomForest.trainClassifier(
            Utils.unwrapObject(input),
            numClasses,
            categoricalFeaturesInfo_uw,
            numTrees,
            featureSubsetStrategy,
            impurity,
            maxDepth,
            maxBins,
            seed
        );

        return Utils.javaToJs(javaObject);
    };
 DataFrameReader.prototype.option = function (keyOrMap, value) {
     var javaObject;
     if (typeof keyOrMap === 'object') {
         var map = Utils.createJavaHashMap(keyOrMap);
         javaObject = this.getJavaObject().option(map);
     } else {
         javaObject = this.getJavaObject().option(keyOrMap, value);
     }
     return new DataFrameReader(javaObject);
 };
    DataFrameReader.prototype.jdbc = function () {
        var javaObject;
        if (arguments.length == 3) {
            // connectionPropertiesMap
            var map = Utils.createJavaHashMap(arguments[2], new java.util.Properties());
            javaObject = this.getJavaObject().jdbc(arguments[0], arguments[1], map);
        } else if (arguments.length == 4) {
            // predicates
            var map = Utils.createJavaHashMap(arguments[3], new java.util.Properties());
            javaObject = this.getJavaObject().jdbc(arguments[0], arguments[1], arguments[2], map);
        } else if (arguments.length == 7) {
            var map = Utils.createJavaHashMap(arguments[6], new java.util.Properties());
            javaObject = this.getJavaObject().jdbc(arguments[0], arguments[1], arguments[2], arguments[3], arguments[4], arguments[5], map);
        } else {
            throw "DataFrameReader.jdbc() invalid number of arguments.";
        }

        return Utils.javaToJs(javaObject);
    }
 DataFrameReader.prototype.options = function (map) {
     var jmap = Utils.createJavaHashMap(map);
     var javaObject = this.getJavaObject().options(jmap);
     return new DataFrameReader(javaObject);
 };