• 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏吧

pyspark RDD – 在一些指标加元组的列表

apache-spark 来源:jakko 5次浏览

我有一个RDD看起来像这样pyspark RDD – 在一些指标加元组的列表

[(3,6,7), (2,5,7), (4,3,7)] 

我想获得的平均第一要素,以及第二个元素之和的总和第三要素。这是输出是什么样子:

(3,14,21) 

是否有可能做到这一点使用pyspark?

===========解决方案如下:

可以转换成数据帧,并使用groupBy

<code class="prettyprint-override">spark.version 
# u'2.2.0' 

# toy data 
rdd = sc.parallelize([(3,6,7), (2,5,7), (4,3,7)]) 
df = spark.createDataFrame(rdd,("x1", "x2", "x3")) 

(df.groupBy().avg("x1").collect()[0][0], 
df.groupBy().sum('x2').collect()[0][0], 
df.groupBy().sum('x3').collect()[0][0]) 
# (3.0, 14, 21) 
</code>

或者你可以组2个sum操作:

<code class="prettyprint-override">ave = df.groupBy().avg("x1").collect() 
sums = df.groupBy().sum("x2","x3").collect() 
(ave[0][0], sums[0][0], sums[0][1]) 
# (3.0, 14, 21) 
</code>

UPDATE(后评论):user8371915的建议导致了一个更优雅的解决方案:

<code class="prettyprint-override">from pyspark.sql.functions import avg, sum 

num_cols = len(df.columns) # number of columns 
res = df.groupBy().agg(avg("x1"), sum("x2"), sum("x3")).first() 
[res[i] for i in range(num_cols)] 
# [3.0, 14, 21] 
</code>

版权声明:本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系管理员进行删除。
喜欢 (0)