Python中使用元组的Spark在连接两个rdd之后如何合并两个元组

2024-04-25 01:01:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我对Spark环境和发展有点陌生。在

我有两个RDD,通过一个joiner合并,结果如下:

(u'10611', ((u'Laura', u'Mcgee'), (u'66821', u'COMPLETE')))
(u'4026', ((u'Mary', u'Smith'), (u'3237', u'COMPLETE')))
(u'4026', ((u'Mary', u'Smith'), (u'4847', u'CLOSED')))

如果您看到我有两个元组和一个键,我想合并两个元组,并将其保留为键和一个元组,如下所示:

^{pr2}$

另外,我如何在saveAsTextFile之前格式化它,用制表符分隔。示例

10611   Laura   Mcgee   66821   COMPLETE
4026    Mary    Smith   3237    COMPLETE
4026    Mary    Smith   4847    CLOSED

我有类似的东西,但不知道如何用元组访问它:

.map(lambda x: "%s\t%s\t%s\t%s" %(x[0], x[1], x[2], x[3]))

Tags: 环境制表符sparkcomplete元组smithclosedrdd
2条回答

您也可以使用列表/元组理解来执行此操作,方法如下:

my_tuple = (u'10611', ((u'Laura', u'Mcgee'), (u'66821', u'COMPLETE')))
new_tuple = (my_tuple[0], tuple(j for k in my_tuple[1] for j in k))

输出:

^{pr2}$

然后,要格式化输出,也可以执行以下操作:

print("{0}\t{1}" .format(new_tuple[0], "\t".join(k for k in new_tuple[1])))

输出:

>>> 10611   Laura    Mcgee   66821   COMPLETE

假设你的数据格式一致,你可以用一个简单的加法运算符合并元组。。。

>>> weird = (u'10611', ((u'Laura', u'Mcgee'), (u'66821', u'COMPLETE')))
>>> weirdMerged = (weird[0], (weird[1][0]+weird[1][1]))
>>> weirdMerged
(u'10611', (u'Laura', u'Mcgee', u'66821', u'COMPLETE'))

输出到文本应该很简单,但是你奇怪的结构也让它有点奇怪。你的兰达不错,但你也可以:

^{pr2}$

我不确定这有多好,但它有效。

相关问题 更多 >