如何使用Python从RDD获取特定记录

时间:2017-07-12 12:39:50

标签: python apache-spark pyspark rdd

我使用Python在RDD中工作。我想从这个RDD找到一个特定的记录

(8, 23, 4.0)
(50, 21, 3.0)
(5, 48, 3.0)
(5, 85, 3.0)
(40, 17, 3.0)
(3, 62, 3.0)
(24, 92, 3.0)
(48, 24, 3.0)
(48, 73, 3.0)
(34, 48, 3.0)    
(50, 14, 3.0)
(1, 78, 3.0)
(7, 8, 3.0)
(10, 87, 3.0)
(14, 82, 3.0)

例如:我希望在1st is 32nd is 62时找到第3个值,因此它应该返回3.0。元组是(3,62,3.0),RDD顶部的第6个

我不知道要使用正确的术语,因为我是Spark和Python的初学者。我没有得到如何使用过滤器或地图功能或使用哪一个。

2 个答案:

答案 0 :(得分:3)

  

我想在1st为3时找到第3个值,第2个是62

您提供了确切的要求,并且您似乎了解了map和filter函数,因此其余的只是对常规python元组解包和lambda函数的理解。

reduced_rdd = rdd.filter(lambda x: x[0] == 3 and x[1] == 62)\
  .map(lambda x: x[2])

答案 1 :(得分:1)

这将返回第一个值为3且第二个值为62的所有值:

records = [(8, 23, 4.0)
(50, 21, 3.0)
(5, 48, 3.0)
(5, 85, 3.0)
(40, 17, 3.0)
(3, 62, 3.0)
(24, 92, 3.0)
(48, 24, 3.0)
(48, 73, 3.0)
(34, 48, 3.0)    
(50, 14, 3.0)
(1, 78, 3.0)
(7, 8, 3.0)
(10, 87, 3.0)
(14, 82, 3.0)]

rdd = sc.parallelize(records)
rdd.filter(lambda x: x[0] == 3 and x[1] == 63)
rdd.map( lambda x: (x[2],) )

filter()中,您可以设置要保留的记录。 在map()中,您可以更改记录中包含的内容。