Python 中的 Spark 使用元组 - 如何在加入两个 RDD 后合并两个元组
Spark in Python Working with Tuples - How can I merge two tuples after joining two RDDs
我是 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'))
另外,如何在 saveAsTextFile 之前格式化它,用 Tab 分隔。例子
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]))
假设您的数据格式一致,您可以使用简单的加法运算符合并元组...
>>> 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
我不确定这是否更好,但它确实有效。
您也可以使用 list/tuple 推导式来完成此示例:
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
我是 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'))
另外,如何在 saveAsTextFile 之前格式化它,用 Tab 分隔。例子
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]))
假设您的数据格式一致,您可以使用简单的加法运算符合并元组...
>>> 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
我不确定这是否更好,但它确实有效。
您也可以使用 list/tuple 推导式来完成此示例:
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