如何将RDD作为地图处理

时间:2018-01-17 14:45:38

标签: scala apache-spark rdd

我是Scala和Spark的新手,我遇到了这个简单的问题,我不知道如何解决。

即,我有2个RDD,我们将它们命名为tx_inputsinput_tx

他们有以下声明:

tx_inputs是2元组的RDD,格式为(tx_1, [input1, input2, ...]),其中[]括号表示Set。密钥(tx_1, tx_2.., tx_n)是唯一的。但相关列表中的tx_k可以包含来自input的一个或多个tx_j(其中j!= k)

input_tx是2元组的RDD,格式为(input_n, false)。这里的键是输入,它们是唯一的。

我想要做的是实现以下伪代码,即产生相同的结果:

do{

changeHappened=false

for (tx, inputs) from tx_inputs:
    if (inputs.length == 1):
        input_tx(inputs[0]) = tx
        tx_inputs.remove(tx)
        changeHappened = true

removeAllLabeledInputs(tx_inputs, input_tx)        
} while(changeHappened)

removeAllLabeledInputs应从inputtx_inputs中未标记为false的所有集合(值)中删除每个input_tx的位置。

所有值均为String。我正在使用Scala 2.11和Spark 2.2.1

P.S。如果我不够清楚,这里有一个小例子:

一开始,我们遇到以下情况:

tx_inputs:

(tx_1, [input1, input2]),
(tx_2, [input1]),
(tx_3, [input3, input4, input1])


inputx_tx:

(input1, false),
(input2, false),
(input3, false), 
(input4, false)

在算法的最后我们有:

tx_inputs:

(tx_3, [input3, input4])


inputx_tx:

(input1, tx_2),
(input2, tx_1),
(input3, false), 
(input4, false)

0 个答案:

没有答案