修改 PySpark 中 RDD 的两个不同列中的数字符号
modify sign of numbers in two different columns of an RDD in PySpark
我正在研究 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)
中的数据符号相同,因此它们没有符号反转。
我该怎么做?
如果这本质上只是一个 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])))
我正在研究 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)
中的数据符号相同,因此它们没有符号反转。
我该怎么做?
如果这本质上只是一个 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])))