Python 在PySpark中修改RDD的两个不同列中的数字符号

Python 在PySpark中修改RDD的两个不同列中的数字符号,python,apache-spark,pyspark,rdd,Python,Apache Spark,Pyspark,Rdd,我正在处理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.9

我正在处理
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)
查看文档地图可能会达到以下目的:

rdd1.map(lambda tup: (tup[0], -abs(tup[1])) if tup[0] < 0 else (tup[0], abs(tup[1])))
rdd1.map(lambda tup:(tup[0],-abs(tup[1]),如果tup[0]<0,则为tup[0],abs(tup[1]))

这不仅仅是python元组列表。它是一个
RDD
。我得到
TypeError:“RDD”对象不可编辑
啊,好吧,我会看一看文档,看看它是如何工作的,你的RDD的名称是什么?试试地图,我在这里有点盲目,因为我没有安装它。哈哈,很好,我知道逻辑是正确的,其余的都是猜测!
rdd1.map(lambda tup: (tup[0], -abs(tup[1])) if tup[0] < 0 else (tup[0], abs(tup[1])))