使用 map/filter 在 Pyspark 中的 RDD 中查找最大元素

Posted

技术标签:

【中文标题】使用 map/filter 在 Pyspark 中的 RDD 中查找最大元素【英文标题】:Find maximum element in an RDD in Pyspark by using map/filter 【发布时间】:2018-03-28 15:42:24 【问题描述】:
a = sc.parallelize((1,9,3,10))

我想在不使用任何 max 函数的情况下找到 a 中的最大元素。

我试过了 a.filter( lambda x,y: x if x>y else y)

我无法比较 RDD 中的元素。如何在 map/filter 函数中正确使用 for 循环或 if else 条件。有可能吗?

谢谢。

我试图发布一个不同的问题。但不能。

a = sc.parallelize((11,7,20,10,1,7))

我想在不使用 sort() 函数的情况下按升序对元素进行排序。

我试过了:

def srt(a,b):
if a>b:
    i=a
    a=b
    b=i   

final=a.map(lambda x,y: srt(x,y))

我没有得到所需的结果。

我想得到

  (1,7,7,10,11,20)

谢谢。

【问题讨论】:

【参考方案1】:

您无法使用过滤器找到最大值/最小值。您可以在 reduce 操作中使用比较来实现:

a = sc.parallelize([1,9,3,10])
max_val = a.reduce(lambda a, b: a if a > b else b)

lambda 只是比较并返回 2 个值中较大的一个。

【讨论】:

谢谢。我还有一个问题。是否可以在 reduce/map/filter 函数中加入 for 循环 您可以声明一个函数func 来做任何您想做的事情,并且您可以在其中拥有任何类型的控制流。然后你可以用函数名替换上面的 lambda 表达式。在这种减少的情况下,您的函数将必须采用 2 个参数(就像 lambda 一样)。 谢谢。如果你不介意,我还有一个问题。我已经更新了这个问题。我试图在不使用 sort() 函数的情况下对 RDD 中的元素进行排序。但它不工作。谢谢。 能否请您在另一个问题上发布?这将有助于搜索结果。 好的。对不起。我去做。只是我必须等待 90 分钟才能发布下一个问题。谢谢。

以上是关于使用 map/filter 在 Pyspark 中的 RDD 中查找最大元素的主要内容,如果未能解决你的问题,请参考以下文章

python 在python中使用map,filter,reduce,lambda

JS中some(),every(),forEach(),map(),filter()区别

python map filter reduce的优化使用

3.python中map,filter,reduce以及内部实现原理剖析

Swift高阶函数:Map,Filter,Reduce

lambda 匿名函数,map,filter,reduce,zip,介绍