了解 PySpark Reduce()

Posted

技术标签:

【中文标题】了解 PySpark Reduce()【英文标题】:Understanding PySpark Reduce() 【发布时间】:2020-06-24 17:20:03 【问题描述】:

我正在使用 PySpark 学习 Spark,我正在尝试使用函数 reduce() 来正确理解它,但我做了一些事情并获得了对我来说毫无意义的结果。

我之前使用 reduce 执行的示例是基本的,例如:

>>> a = sc.parallelize(['a','b','c','d'])
>>> a.reduce(lambda x,y:x+y)
'abcd'

>>> a = sc.parallelize([1,2,3,4])
>>> a.reduce(lambda x,y:x+y)
10

>>> a = sc.parallelize(['azul','verde','azul','rojo','amarillo'])
>>> aV2 = a.map(lambda x:(x,1))
>>> aRes = aV2.reduceByKey(lambda x,y: x+y)
>>> aRes.collect()
[('rojo', 1), ('azul', 2), ('verde', 1), ('amarillo', 1)]

但我试过这个:

>>> a = sc.parallelize(['a','b','c','d'])
>>> a.reduce(lambda x,y:x+x)
'aaaaaaaa'

结果我期待“aaaa”,但没有“aaaaaaaa”

我正在寻找阅读 reduce() 文档的答案,但我认为我遗漏了一些东西。

谢谢!

【问题讨论】:

【参考方案1】:

你在 lambda 函数中的 x 是不断变化的,所以每一步中最后一个表达式的 x 是

a
aa 
aaaa

给出最后一个结果aaaaaaaa。字数要加倍配合你的表情。

【讨论】:

以上是关于了解 PySpark Reduce()的主要内容,如果未能解决你的问题,请参考以下文章

如何在pyspark中将GUID转换为整数

如何更改pyspark中的列元数据?

pyspark pandas 对象作为数据框 - TypeError

Pyspark应用不同的基于reduce函数的键

使用 Python 的 reduce() 加入多个 PySpark DataFrames

如何使用给定的reduce函数基于pyspark中的字段合并多个JSON数据行