当前位置: 首页 > 知识库问答 >
问题:

将元组元素减去其他元组-Pyspark

淳于典
2023-03-14

我是使用火花和蟒蛇的新手

我有以下元组

#Money in each account
[(key), {(4.32,32.32,23.3),(3.23,32.2,21.3)}]

我要做的是,从每个元素中减去,例如(4.32,32.32,23.3),每个帐户对应的平均值,到4.32-3.23,到32.32-32.32。。。

我的想法是做到以下几点。

subtract = myRDD.reduceByKey(lambda x,y: ((x[0][0]-y[1][0]), (x[0][1]-y[1][1]), (x[0][2]-y[1][2])))

但是我不知道如何才能正确地输入索引。

我的输入文件具有以下结构。

Index,Person,Account1,Account2,Account3
0,Serge,5.958191,0.6880646,8.135345

然后我计算每行的平均值,因此例如对于所有名为Serge的Keys,我有以下数据元组。

{('Serge'),((5.958191,0.6880646,8.135345),(3.23,32.2,21.3))}

现在我想要的是减去每个元素的平均值...

例如,在本例中,我想要一个具有以下结构的元组。

{('Serge'),((5.958191-3.23,0.6880646-32.2,8.135345-21.3, 10))}

我的代码;

data = sc.textFile("myFile.csv")

data1 = data.map(lambda x: ((x.split(",")[1]),(x.split(",")[2],x.split(",")[3],x.split(",")[4]))

mean = data.mapValues( lambda x: (x,1) ) \
     .reduceByKey (lambda x , y: ((x[0][0] + y[0][0], x[0][1] + y[0][1], x[0][2] + y[0][2]), x[1] + y[1])).mapValues (lambda a: (a[0][0]/a[1],a[0][1]/a[1],a[0][2]/a[1], a[1]))

data2 = mean.join(data1)

mapValues中的最后一个[1]是获取我的项目计数。

共有1个答案

濮俭
2023-03-14

如果您有平均rdd,那么您可以将rdd还原为

(u'Serge', (-5.962059049999999, 0.6719970749999999, 8.15111525))

以及读取新文件后获得的data1 rdd

(u'Serge', (3.23, 32.2, 21.3))

而你加入他们

data2 = mean.join(data1)

所以你有

(u'Serge', ((-5.962059049999999, 0.6719970749999999, 8.15111525), (3.23, 32.2, 21.3)))

现在我想要的是减去每个元素的平均值...
例如,在这种情况下,我想要一个具有以下结构的元组。
{('Serge'),((5.958191-3.23,0.6880646-32.2,8.135345-21.3, 10))}

我不知道这10是从哪里来的,但要进行减法,只需使用map函数

data2.map(lambda x: ((x[0]), (x[1][0][0] - x[1][1][0], x[1][0][1] - x[1][1][1], x[1][0][2] - x[1][1][2])))

所以最终的结果是

('Serge', (-9.19205905, -31.528002925000003, -13.14888475))

我希望答案有帮助

 类似资料:
  • 我有一个类似 我试图使所有元素联合元素,但同一子数组中的元素不得复制。 这将根据第一个子数组中的元素数进行添加。我试过了,但找不到任何解决办法。有人能帮忙吗? 这是我试过的代码: 提前感谢。!

  • 如何移除第一个数组但返回减去第一个元素的数组 在我的示例中,当删除第一个元素时,我应该得到

  • 我有一个数组[25,-6,14,7,100]。预期输出为 基本上,循环时下一个元素被减/加到当前元素中。求和和乘积很容易,因为我只需要做 它在线程“main”java.lang.ArrayIndexOutOfBoundsException中给出了

  • 下面我有以下数据。 所以,我不知道为什么UDF可以使用int而不能使用CharArray。此外,我觉得可能有一种方法可以做到这一点,而不使用UDF..但不确定从哪里开始。对这里可能发生的事情有什么建议吗?

  • 本文向大家介绍php 数组元素快速去重,包括了php 数组元素快速去重的使用技巧和注意事项,需要的朋友参考一下 1.使用array_unique方法进行去重 对数组元素进行去重,我们一般会使用array_unique方法,使用这个方法可以把数组中的元素去重。 输出: 去重后,键值会不按顺序,可以使用array_values把键值重新排序。 2.使用array_unique方法去重效率 unique

  • 主要内容:JavaTuples 元组检查元素的方法,JavaTuples 元组检查元素的示例JavaTuples 元组检查元素的方法 每个元组都提供实用方法来以与集合类似的方式检查其元素。 contains(element) : 检查元素是否存在。 containsAll(collection) : 检查元素是否存在。 indexOf(element) : 如果存在,则返回第一个元素的索引,否则返回 -1。 lastIndexOf(element) : 如果存在,则返回最后一个元素的索引