微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

派斯帕克只获取最小值

如何解决派斯帕克只获取最小值

我只想获得最小值。

import pyspark as ps

spark = ps.sql.SparkSession.builder.master('local[4]')\
    .appName('some-name-here').getorCreate()

sc = spark.sparkContext

sc.textFile('path-to.csv')\
    .map(lambda x: x.replace('"','').split(','))\
    .filter(lambda x: not x[0].startswith('player_id'))\
    .map(lambda x: (x[2] + " " + x[1],int(x[8]) if x[8] else 0))\
    .reduceByKey(lambda value1,value2: value1 + value2)\
    .sortBy(lambda price: price[1],ascending=True).collect()

这是我得到的:

[('Cedric Ceballos',0),('Maurcie Cheeks',('James Foster',('Billy Gabor',('Julius Keye',('Anthony Mason',('Chuck Noble',('Theo Ratliff',('Austin Carr',('Mark Eaton',('A.C. Green',('Darrall Imhoff',('John Johnson',('Neil Johnson',('Jim King',('Max Zaslofsky',1),('Don BarksDale',('Curtis Rowe',('Caron Butler',2),('Chris gatling',2)].

如您所见,有很多键值为 0,这是最小值。我该如何排序?

解决方法

您可以将最小值收集到一个变量中,并根据该变量进行相等过滤:

rdd = sc.textFile('path-to.csv')\
    .map(lambda x: x.replace('"','').split(','))\
    .filter(lambda x: not x[0].startswith('player_id'))\
    .map(lambda x: (x[2] + " " + x[1],int(x[8]) if x[8] else 0))\
    .reduceByKey(lambda value1,value2: value1 + value2)\
    .sortBy(lambda price: price[1],ascending=True)

minval = rdd.take(1)[0][1]
rdd2 = rdd.filter(lambda x: x[1] == minval)
,

您的数据已经排序。使用 take(1) 而不是 collect() 获取第一个元素,最小值

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。