【发布时间】:2017-06-26 16:56:18
【问题描述】:
我是 Spark 和 Scala 的新手。我有一个 Mongo 集合,其中包含这样的文档:
{
"_id": "doc_1",
"posts": {
"a": { "total": 1 },
"b": { "total": 2 }
}
}
我正在像这样将它加载到 Spark RDD 中
val rc = ReadConfig(Map("collection" -> "my_collection"), Some(ReadConfig(sparkSession)))
val rdd = MongoSpark.load(sparkContext, rc)
我想使用flatMap(或其他合适的函数)将帖子子文档展平成一个新的RDD,如下所示:
|--------|---------|-------|
| doc_id | post_id | total |
|--------|---------|-------|
| doc_1 | a | 1 |
| doc_1 | b | 2 |
| doc_2 | ... | ... |
|--------|---------|-------|
(我使用的是 RDD 而不是 DataFrame,因为文档很大,而且似乎使用的内存更少)。
flatMap 的签名是flatMap[U](f: (T) => TraversableOnce[U])(implicit arg0: ClassTag[U]): RDD[U]。 RDD 中的每个对象都是来自 Mongo 连接器的 org.bson.Document,所以我想写如下内容:
val newRdd = rdd.flatMap( { x: org.bson.Document => { x.posts }})
但这给出了:
值的帖子不是 org.bson.Document 的成员
我做了很多谷歌搜索。似乎这应该很简单,但我无法弄清楚。你能指出我正确的方向吗?
【问题讨论】:
-
你尝试过爆炸功能吗?
标签: mongodb scala apache-spark