使用 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()区别