【发布时间】:2015-10-09 05:08:10
【问题描述】:
有一些方法可以将org.apache.spark.sql.DataFrame 的数据保存到文件系统或Hive。但是如何将MongoDB数据上创建的DataFrame中的数据保存回MongoDB呢?
编辑:我使用
创建了DataFrameSparkContext sc = new SparkContext()
Configuration config = new Configuration();
config.set("mongo.input.uri","mongodb://localhost:27017:testDB.testCollection);
JavaRDD<Tuple2<Object, BSONObject>> mongoJavaRDD = sc.newAPIHadoopRDD(config, MongoInputFormat.class, Object.class,
BSONObject.class).toJavaRDD();
JavaRDD<Object> mongoRDD = mongoJavaRDD.flatMap(new FlatMapFunction<Tuple2<Object, BSONObject>, Object>()
{
@Override
public Iterable<Object> call(Tuple2<Object, BSONObject> arg)
{
BSONObject obj = arg._2();
Object javaObject = generateJavaObjectFromBSON(obj, clazz);
return Arrays.asList(javaObject);
}
});
sqlContext = new SqlContext(sc);
DataFrame df = sqlContext.createDataFrame(mongoRDD, Person.class).registerTempTable("Person");
【问题讨论】:
-
好吧,我的 Java 充其量是生锈的,但我真的不明白为什么要为
flatMap创建单个元素列表。简单的地图就足够了。还有generateJavaObjectFromBSON内部发生了什么?
标签: mongodb apache-spark dataframe apache-spark-sql