如何在Spark中将(key,array(value))转换为(key,value)

时间:2018-08-17 07:49:43

标签: scala apache-spark rdd

我的RDD如下:

val rdd1 = sc.parallelize(Array((1,Array((3,4),(4,5))),(2,Array((4,2),(4,4),(3,9)))))

这是RDD[(Int,Array[(Int,Int)])],我想通过诸如RDD[(Int,(Int,Int)]之类的操作获得flatMap之类的结果。在此示例中,结果应为:

(1,(3,4))
(1,(4,5))
(2,(4,2))
(2,(4,4))
(2,(3,9))

我是新手,所以该怎么办? 非常感谢。

2 个答案:

答案 0 :(得分:3)

您可以在这种情况下使用flatMap:

import { Injectable } from '@angular/core';
import { mongoose } from 'mongoose';
@Injectable()
export class BD {

    private bd;
    public test: string; 

    constructor(mongoose: mongoose){}
    Test(){
        mongoose('the url of the database')
        this.bd = mongoose.connection;
        this.bd.on('error', console.error.bind(console, 'error: impossible connection to the database'));
        this.bd.once('open', ()=>{console.log('connected to the DB :}')})
    }
}

答案 1 :(得分:2)

假设将RDD设为rd。使用下面的代码根据需要获取数据

rdd1.flatMap(x => x._2.map(y => (x._1,y)))

map中的内部flatmap方法读取x._2数组,并一次以y读取数组的每个值。之后,平面图会将它们作为单独的项目提供。 x._1是RDD中的第一个值。