繁体   English   中英

在两个 Spark DataFrame 中逐行添加值

[英]Add values in two Spark DataFrames, row by row

我有两个 Spark DataFrame,它们的值要相加,然后相乘,并且只保留最低的一对值。 我写了一个 function 可以做到这一点:

math_func(aValOne, aValTwo, bValOne, bValTwo):
    tmpOne = aValOne + bValOne
    tmpTwo = aValTwo + bValTwo
    final = tmpOne*tmpTwo
    return final

我想逐行遍历两个 Spark DataFrame,“A”和“B”,并保留最低值的结果。 因此,如果我有两个 DataFrame:

DataFrameA:
ID | ValOne | ValTwo
0  | 2      | 4
1  | 3      | 6

DataFrameB:
ID | ValOne | ValTwo
0  | 4      | 5
1  | 7      | 9

我想先从 DataFrameA: 中取出第 0 行,将其与 DataFrameB 的第 0 行和第 1 行进行比较,然后保留最低值的结果。 我试过这个:

results = DataFrameA.select('ID')(lambda i: DataFrameA.select('ID')(math_func(DataFrameA.ValOne, DataFrameA.ValTwo, DataFrameB.ValOne, DataFrameB.ValOne))

但我在遍历 DataFrame 列时遇到错误。 我知道在 Pandas 中,我基本上会创建一个嵌套的“for循环”,然后将结果写入另一个 DataFrame 和 append 结果。 我期望的结果是:

Initial Results:
DataFrameA_ID | Value | DataFrameB_ID
0             | 54    | 0 
0             | 117   | 1    
1             | 77    | 0
1             | 150   | 1

Final Results:
DataFrameA_ID | Value | DataFrameB_ID
0             | 54    | 0    
1             | 77    | 0

我是 Spark 的新手,但我知道我没有以正确的方式接近这一点。

关于如何 go 对此有何想法?

您将需要多个步骤来实现这一目标。

假设你有数据

DFA:
ID | ValOne | ValTwo
0  | 2      | 4
1  | 3      | 6

DFB:
ID | ValOne | ValTwo
0  | 4      | 5
1  | 7      | 9

第 1 步。对您的 2 个数据帧进行笛卡尔连接。 这会给你:

Cartesian:
DFA.ID | DFA.ValOne | DFA.ValTwo | DFB.ID | DFB.ValOne | DFB.ValTwo
0      | 2          | 4          | 0      |          4 | 5
1      | 3          | 6          | 0      |          4 | 5 
0      | 2          | 4          | 1      |          7 | 9
1      | 3          | 6          | 1      |          7 | 9

第2步。

乘以列:

    Multiplied:
    DFA.ID | DFA.Mul | DFB.ID | DFB.Mul
    0      | 8       | 0      |     20
    1      | 18      | 0      |     20 
    0      | 8       | 1      |     63
    1      | 18      | 1      |     63

步骤 3.按 DFA.Mul 和 DFB.Mul 中的DFA.IDDFB.Mul min DFA.Mul

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM