我正在处理PySpark
并且我有RDD
,打印时看起来像这样:
[(-10.1571, -2.361), (-19.2108, 6.99), (10.1571, 4.47695), (22.5611, 20.360), (13.1668, -2.88), ....]
正如您所看到的,RDD
中的每个元素都有两个数据。现在我要做的是检查两个数据的符号是否不同,然后反转第二个数据的符号以匹配第一个数据。例如 - 在(-19.2108, 6.99)
中,两个数据的符号不同,因此我想反转6.99
的符号使其成为-6.99
,以便它与第一个数据的符号相匹配。但(-10.1571, -2.361)
和(22.5611, 20.360)
中的数据符号相同,因此没有符号反转。
我该怎么做?
答案 0 :(得分:1)
如果这只是一个python的元组列表,只需检查第一个元素,你实际上并不关心第二个元素只需要匹配第一个元素:
l = [(-10.1571, -2.361), (-19.2108, 6.99), (10.1571, 4.47695), (22.5611, 20.360), (13.1668, -2.88)]
l[:] = [(a, -abs(b)) if a < 0 else (a, abs(b))for a, b in l]
print(l)
输出:
[(-10.1571, -2.361), (-19.2108, -6.99), (10.1571, 4.47695), (22.5611, 20.36), (13.1668, 2.88)]
查看文档地图可能会起到作用:
rdd1.map(lambda tup: (tup[0], -abs(tup[1])) if tup[0] < 0 else (tup[0], abs(tup[1])))