压扁未知长度的元组

时间:2015-02-18 22:19:00

标签: python tuples flatten pyspark

我在加入后有一个由Spark生成的元组。它有一个键,一个元组中的两列,然后是第二个表中的其余列。我不一定知道第二张表中有多少列。

所以,例如:

(2324234534, (('23213','2013/03/02'), 12.32, 32.4, 45))

如果在PySpark中的zip,日期元组之后有一列,我能够分离元组:

x.map(lambda p: (p[0], (p[1][0][0], p[1][0][1], p[1][1])))
Python中的

map(lambda p: (p[0], (p[1][0][0], p[1][0][1], p[1][1])), x)

这会产生我正在寻找的输出:

(2324234534, ('23213','2013/03/02', 12.32))

如果我想在zip之后输入多个列,那么我有以下代码:

x.map(lambda p: (p[0], (p[1][0][0], p[1][0][1], p[1][1:])))

然而,它产生了这个输出:

(2324234534, ('23213','2013/03/02', (12.32, 32.4, 45)))

无论哪种方式,我目前的方法都是hacky,并没有产生我正在寻找的结果。或许,我感兴趣的是学习如何整理元组(我在这个主题上找到的其他线程将元组转换为列表,这不是我正在寻找的100%)

1 个答案:

答案 0 :(得分:1)

如果我理解你的目标,我相信这就是你想要的:

In [11]: a = (2324234534, (('23213','2013/03/02'), 12.32, 32.4, 45))

In [12]: a[:1] + (a[1][0] + a[1][1:],)
Out[12]: (2324234534, ('23213', '2013/03/02', 12.32, 32.4, 45))