【发布时间】:2019-11-18 20:11:52
【问题描述】:
我有两个 Spark DataFrame,它们的值要相加,然后相乘,并且只保留最低的一对值。我写了一个函数可以做到这一点:
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 并附加结果。我期望的结果是:
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 的新手,但我知道我没有以正确的方式解决这个问题。
有什么想法可以解决这个问题吗?
【问题讨论】:
-
这是否意味着如果您在 A 中有
m行,在 B 中有n,那么您将执行 m*n 操作?你也可以用预期的输出来更新你的问题吗? -
是的,没错。我知道计算复杂度有点高,但我没有看到任何其他方法。
-
@Amit 我在预期的最终结果中添加了
标签: python dataframe apache-spark