我正在尝试学习使用像reduce
这样的函数式编程结构,并且我试图了解如何将它一起用于union
多个dataframes
。我能用一个简单的for循环完成它。您可以看到注释掉expr
这是我的尝试,我遇到的问题是reduce
是Python
函数的事实,所以我正在交错{{1和Python
代码在同一个函数中,这不会使编译器满意。
这是我的代码:
Spark
答案 0 :(得分:1)
您为reduce
提供了错误的初始值,导致您调用的情况
''.unionAll(b)
显然它没有意义。放弃initial
:
reduce(lambda acc, b: acc.unionAll(b), l) if l else None
或将''
替换为具有有效架构的DataFrame
:
first, *rest = l
reduce(lambda acc, b: acc.unionAll(b), rest, first)
此外,不需要lambda表达式:
from pyspark.sql import DataFrame
reduce(DataFrame.unionAll, rest, first)
如果你有冒险的心情,你甚至可以追逐DataFrame
:
DataFrame.__add__ = DataFrame.unionAll
sum(rest, first)
另一方面,没有截断血统的迭代联合并不是Spark的最佳选择。