【发布时间】:2018-03-05 17:38:18
【问题描述】:
我想用递归方法合并数据框。
我正在递归方法中进行一些计算并过滤数据并存储在一个变量中。在第二次迭代中,我将进行一些计算,然后再次将数据存储在同一个变量中。当我第二次调用该方法时,我的第一个结果消失了。理想情况下,我必须将结果存储在一个临时变量中,我需要这样做合并所有结果,直到递归方法完成执行。
df 中的 Iteration1 输出:
Col1
14
35
df 中的 Iteration2 输出:
Col1
18
20
现在我需要最终输出,
Col1
14
35
18
20
代码:
def myRecursiveMethod(first: List[List[String]],
Inputcolumnsdummy: List[List[String]],
secondInputcolumns: List[List[String]] = {
val ongoingResult = doSomeCalculation(first,Inputcolumnsdummy, secondInputcolumns)
}
我希望我的代码如下所示,
def myRecursiveMethod(first: List[List[String]],
Inputcolumnsdummy: List[List[String]],
secondInputcolumns: List[List[String]]) = {
val ongoingResult = doSomeCalculation(first, Inputcolumnsdummy, secondInputcolumns)
Val temp = temp.union(ongoingResult)
}
【问题讨论】:
-
为什么不使用 union 或 unionAll 来合并两个数据框?
-
对
myRecursiveMethod的递归调用在哪里?看起来您必须将union的结果作为您应该添加到方法中的另一个参数的值传递。 -
@Ramesh Maharjan 为了做到这一点,我们的递归方法中应该有两个可用的数据框数据。当控制进入第二次迭代时,第一个结果消失,第二次迭代数据存储在变量中。
-
你为什么使用递归函数?已经有用于按列递归操作的内置函数和用于按行操作的 udf 函数。您为什么不尝试从其中之一或全部中受益呢?解释问题中的所有细节,例如为什么需要递归函数以及如何访问它。我们会为您提供更好的解决方案。
-
@Ramesh Maharjan 很好,但我已经完成了一半,所以我想进一步使用递归方法。将结果存储在一个温度中并继续将数据联合到该变量的递归方法是否有任何限制?我不能这样做吗?
标签: scala apache-spark spark-dataframe