Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark 使用python spark的RDD中的最后一个元素_Apache Spark_Rdd - Fatal编程技术网

Apache spark 使用python spark的RDD中的最后一个元素

Apache spark 使用python spark的RDD中的最后一个元素,apache-spark,rdd,Apache Spark,Rdd,我试图从Spark RDD获取最后一个元素信息。 我已经用(键,值)对各自的值对RDD进行了排序 我在RDD中的数据 (8, 0.98772733936789858) (4, 3.0599761935471004) (2, 3.1913934060593321) (1, 4.9646263295153013) (5, 5.3596802463208792) (7, 5.5829277439661071) (9, 6.4739040233992258) (0, 6.934368150

我试图从Spark RDD获取最后一个元素信息。 我已经用
(键,值)
对各自的值对RDD进行了排序

我在RDD中的数据

(8, 0.98772733936789858)

(4, 3.0599761935471004)

(2, 3.1913934060593321)

(1, 4.9646263295153013)

(5, 5.3596802463208792)

(7, 5.5829277439661071)

(9, 6.4739040233992258)

(0, 6.9343681509951081)

(6, 7.4699692671955953)

(3, 8.6579764626088771)

我可以使用第一个函数获取第一个
(键、值)
对,但无法确定如何获取最后一个。我可以将
(key,value)
对交换为
(value,key)
对,并使用.max函数获取所需的数据。但是,是否有其他方法可以使用Python spark从RDD获取最后一个元素?

RDD.first()非常有效,因为它可以以短路方式执行。因为您仍然在对数据进行排序,所以按照元组中的第二个值对RDD进行反向排序,然后只取第一个元素。

是的,还有其他方法

下面是一些(包括您的),以及一个非常非正式的性能排名,它基于每个方法1000个测试,在我的机器上有一个本地工作线程——使用您在问题中提供的数据集

1) 最大值() 查找此RDD中的最大项

这是平均速度第一快的

2) sortByKey()--带第一个() 对该RDD进行排序,该RDD假定由(键、值)对组成

返回此RDD中的第一个元素

这是平均第四快的

3) top() 从RDD中获取前N个元素

这是平均速度第三快的

4) top()--具有比较键 从RDD中获取前N个元素

这是平均第二快的

最后的想法 您会注意到第四个方法不会交换(键/值)的。相反,它使用key('key'参数——不是rdd的一部分)遍历rdd,指定一个参数的函数,该参数用于从iterable中的每个元素提取比较键,在这种情况下,比较键是(key,value)元组中的第二项,即value

所以方法1 max()非常好。但是

一旦您进入需要“最后n个元素”的区域(即不仅仅是最后一个元素)那么我会说方法4是首选方法。

Dup?
output = (
          rdd.map(lambda (a, b): (b, a))
          .max()
         )
output = (
          rdd.map(lambda (a, b): (b, a))
          .sortByKey(ascending=False)
          .first()
         )
output = (
          rdd.map(lambda (a, b): (b, a))
          .top(1)
         )
output = (
          rdd.top(1, key=lambda x: x[1])
         )