在Haskell中实现类似以下内容的最惯用方法是什么:
foldl (+) 0 [1,2,3,4,5]
--> 15
Run Code Online (Sandbox Code Playgroud)
或者它在Ruby中的等价物:
[1,2,3,4,5].inject(0) {|m,x| m + x}
#> 15
Run Code Online (Sandbox Code Playgroud)
显然,Python提供了reduce函数,这是fold的实现,完全如上所述,然而,有人告诉我,'pythonic'编程方式是避免使用lambda术语和高阶函数,在可能的情况下更喜欢列表推导.因此,有没有一种首选的方法来折叠Python中的列表或类似列表的结构,而不是reduce函数,或者是reduce实现这一目的的惯用方法?
我有一个包含多个列的Spark数据帧.我想在数据帧上添加一列,它是一定数量的列的总和.
例如,我的数据如下所示:
ID var1 var2 var3 var4 var5
a 5 7 9 12 13
b 6 4 3 20 17
c 4 9 4 6 9
d 1 2 6 8 1
Run Code Online (Sandbox Code Playgroud)
我想要添加一列来汇总特定列的行:
ID var1 var2 var3 var4 var5 sums
a 5 7 9 12 13 46
b 6 4 3 20 17 50
c 4 9 4 6 9 32
d 1 2 6 8 10 27
Run Code Online (Sandbox Code Playgroud)
我知道如果您知道要添加的特定列,可以将列添加到一起:
val newdf = df.withColumn("sumofcolumns", df("var1") + df("var2"))
Run Code Online (Sandbox Code Playgroud)
但是可以传递列名列表并将它们一起添加吗?基于这个答案基本上是我想要的,但它使用的是python API而不是scala(在PySpark数据框中添加列和作为新列)我觉得这样的事情会起作用: …