Привет. Я пытаюсь загрузить 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 искры знаний еще раз спасибо