2017-01-23 5 views
0

私はSpark Environment and Developmentでちょっと新しくなりました。Pythonでスパークするタプルを使って作業する - 2つのRDDを結合した後に2つのタプルをマージするには

は私は建具を経て合併した2 RDDSを持って、その建具の結果は以下の通りです:あなたは、私は2つのタプルと鍵を持って表示された場合

(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'))) 

が、私は両方のタプルをマージしたいと以下のように、キーと1組として、それを残す:

(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、前にこれをフォーマットすることができます。例

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])) 

答えて

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')) 

テキストへの出力はシンプルである必要がありますが、あなたのoddball構造によってもちょっと変わってしまいます。あなたのラムダは悪くないですが、あなたも行うことができます:

>>> print('\t'.join((weirdMerged[0],)+weirdMerged[1])) 
10611 Laura Mcgee 66821 COMPLETE 

私はそれがはるかに良いですわからないんだけど、それが動作します。

+0

どのように私はpysparkでそれを行うことができますか?私はPythonとSparkで新しいです。 –

+0

これは働いた: 'merge = cust_j_orders.map(ラムダx:(x [0]、(x [1] [0] + x [1] [1] ))) ') –

+0

正直言って、私は本当にPySparkに精通していません。私はそれがPythonのスーパーセットだと仮定して、Python構文がうまくいくようにしました。 –

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)) 

は出力:次に

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 
+0

私はそれを試しています....あなたの答えに感謝 –

+0

ようこそ –

+0

私はpysparkに変換するとき何らかの理由でそれを使用できませんでした。出力が '1 \ t0'であることを私に教えています 'fmt = cust_j_orders.map( " –

関連する問題