我只是从Apache Spark开始。我有一个数据集,如下所示:
const knex = await bp.db.get();
const userIds = await knex('_students').distinct('id').pluck('id');
const promises = userIds.map((userId) => {
return bp.dialogEngine.jumpTo(userId, 'question.flow.json')
});
return Promise.all(promises);
我希望RDD如下所示: (A1,[Z1,Z2,Z3,Z4])其中A1是键,[Z1,Z2,Z3,Z4]是可迭代的字符串值。 我可以将键和冒号上的值分开,但是我不知道如何进一步进行。这是我的代码的一部分。
A1: Z1 Z2 Z3 Z4
A2: X1 X2 X3 X4 X5 X6
A3: L1 L2
A4: Z1 X4 L2
线看起来像A1:Z1 Z2 Z3 Z4
parts [0]有我的键,而parts [1]具有由空格分隔的键的所有值:Z1 Z2 Z3 Z4
答案 0 :(得分:0)
我在上面的评论中提到的“爆炸”是flatMap
,它从单个输入行中产生多个输出行。
您可以使用以下片段(可以单独由flatMapToPair
实现,而无需涉及mapToPair
,但是我分两步进行了操作,以使您清楚实际的情况):
JavaPairRDD<String, Iterable<String>> links =
lines.flatMap(s -> {
List<String> pairs = new ArrayList<String>();
String[] parts = COLONS.split(s);
String[] outGoingLinks = SPACES.split(parts[1]);
for(int i=0; i < outGoingLinks.length; i++)
pairs.add(parts[0] + " " + outGoingLinks[i]);
return pairs.iterator();
}).mapToPair(s -> {
String[] parts = SPACES.split(s);
return new Tuple2<String, String>(parts[0], parts[1]);
}).distinct().groupByKey().cache();