我在Spark环境与开发方面有点新鲜。
我有两个RDD,我通过一个木匠合并,该木匠的结果如下:
(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')))
如果你看到我有两个元组和一个键,我想合并两个元组并将其保留为键和一个元组,如下所示:
(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'))
另外,如何在由DFP分隔的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]))
答案 0 :(得分:2)
假设您的数据格式一致,您可以将元组与一个简单的加法运算符合并......
>>> 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'))
输出到文本应该很简单,但是你的古怪结构使它有点奇怪。你的lambda还不错,但你也可以这样做:
>>> print('\t'.join((weirdMerged[0],)+weirdMerged[1]))
10611 Laura Mcgee 66821 COMPLETE
我不确定它会好得多,但它确实有用。
答案 1 :(得分:2)
你也可以使用list / tuple comprehension来做这个例子:
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))
输出:
print(new_tuple)
>>> ('10611', ('Laura', 'Mcgee', '66821', 'COMPLETE'))
然后,要格式化输出,您也可以这样做:
print("{0}\t{1}" .format(new_tuple[0], "\t".join(k for k in new_tuple[1])))
输出:
>>> 10611 Laura Mcgee 66821 COMPLETE