2017-01-31 11 views
0

私はsparkとpythonを使っています。私は入力データセットを変換したいと思います。私が望む私はこのデータフレーム(出力データセット)を持っていると思いdictをスパークマップ出力に変換する方法

私の入力データセット(RDD)

------------------------------------------------------------- 
| id |     var         | 
------------------------------------------------------------- 
| 1 |"[{index: 1, value: 200}, {index: 2, value: A}, ...]" | 
| 2 |"[{index: 1, value: 140}, {index: 2, value: C}, ...]" | 
| .. |      ...        | 
------------------------------------------------------------- 

---------------------- 
| id | index | value | 
---------------------- 
| 1 | 1 | 200 | 
| 1 | 2 | A  | 
| 1 | ... | ... | 
| 2 | 1 | 140 | 
| 2 | 2 | C  | 
| ...| ... | ... | 
---------------------- 

私はマップ機能

def process(row): 
    my_dict = {} 
    for item in row['value']: 
     my_dict['id'] = row['id'] 
     my_dict['index'] = item['index'] 
     my_dict['value'] = item['value'] 

    return my_dict 

を作成私のプロセス関数を次のようにマップする:

output_rdd = input_rdd.map(process) 

これは、この方法(または簡単な方法)で可能ですか?

+2

[PySparkで平坦化RDDに複雑なRDDの変換]の可能複製(http://stackoverflow.com/questions/41632030/converting-complex-rdd-to-をa-flatten-rdd-with-pyspark) – eliasah

+0

その答えをありがとう。私の問題は少し異なります。ネストされたフィールドがあり、列の選択は特定の条件の下で行われます。しかし、この投稿は私に応答に答える最初の場所を与えてくれます。 – Raouf

+0

だから私はそれを共有している。 – eliasah

答えて

0

私は解決策が見つかりました:

output_rdd = input_rdd.map(lambda row:process(row)).flatMap(lambda x: x) 
関連する問題