Как использовать явную схему, чтобы данные mongodb правильно отображались и сохранялись в виде строки? Искра Java - PullRequest
0 голосов
/ 13 апреля 2020

Привет. Я пытаюсь загрузить mongodb для сохранения в виде таблицы кустов.

, поскольку мои данные представляют собой сложную вложенную структуру с нулями, я решил сохранить целое json в виде строкового узла.

образец узла mongodb

{ "_id" : "585024d558bef808ed84fc3e", "properties" : {"prop1": null, "prop2":["a", "b", "c"], "prop3":{"nested1":"somedata", "nested2":"somedata"}}, "updated_at" : 1423173806869 }

, и вот новая схема похожа на

root
 |-- _id: string (nullable = true)
 |-- node: string (nullable = true)

, поэтому я обращаюсь к https://docs.mongodb.com/spark-connector/master/java/datasets-and-sql/ для секция явной схемы создала pojo, подобный этому

    public static final class NODE implements Serializable {
        private String _id;
        private String node;

        public String get_id() { return _id; }
        public void set_id(String _id) { this._id = _id; }

        public String getNode() { return node; }
        public void setNode(String node) { this.node = node; }
    }

, а затем создала свечу

    SparkSession mongo_spark = SparkSession.builder()
            .master("local")
            .appName("MongoSparkConnectorIntro")
            .config("mongo_spark.master", "local")
            .config("spark.mongodb.input.uri", "mongodb://localhost:27017/test_db.test_collection")
            .enableHiveSupport()
            .getOrCreate();
    // Create a JavaSparkContext using the SparkSession's SparkContext object
    JavaSparkContext jsc = new JavaSparkContext(mongo_spark.sparkContext());

, и мой вопрос здесь, я не уверен, как правильно создать фрейм данных, используя карту здесь

    Dataset<Row> df = MongoSpark.load(sc).map(new Function<Row, >() {
            @Override
                    public NODE call(Row row) throws Exception {
                        String _id = row.get(row.fieldIndex("_id")).toString();
                        String flat_node = row.toString();
                        NODE node = new NODE();
                        node.set_id(_id);
                        node.setNode(flat_node);
                        return node;
                    }
        }).toDF();    

или go по этому маршруту

    Dataset<NODE> df = MongoSpark.load(sc).map(row->{
            // do something to convert the row to string
        }).toDS(NODE.class);


Я не нашел подходящего решения, любой комментарий благодарен. очень признателен за помощь в пополнении java искры знаний еще раз спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...