[英]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.ID
和DFB.Mul
min DFA.Mul
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.