2017-12-20 9 views
0

from pyspark.sql import RowPySpark Rowオブジェクトの変異コピーを作成するには?

A行オブジェクトは不変です。それをPython辞書に変換してから、Rowオブジェクトに変換して戻すことができます。辞書に変換して行に戻すことなく、変更可能なコピーや改ざんされたコピーを作成する方法はありますか?

これは、mapPartitionsで実行される関数で必要です。

答えて

0

実際のユースケースによっては、既存のものから新しいRowオブジェクトを作成することも可能です。

from pyspark.sql import Row 
R = Row('a', 'b', 'c') 
r = R(1,2,3) 

のはrから新しい行オブジェクトを作成し、我々はrため3aを変更したいとしましょう:

R(3, r.b, r.c) 
# Row(a=3, b=2, c=3) 

rはまだですが:ここ

r 
# Row(a=1, b=2, c=3) 
0

です突然変異したコピーを作るためのダイナミックな解決策を考えました:

from pyspark.sql import Row 

def copy(row, **kwargs): 
    dict = {} 
    for attr in list(row.__fields__): 
     dict[attr] = row[attr] 

    for key, value in kwargs.items(): 
     dict[key] = value 

    return Row(**dict) 

row = Row(name="foo", age=45) 
print(row) #Row(age=45, name='foo') 

new_row = copy(row, name="bar") 
print(new_row) #Row(age=45, name='bar') 
関連する問題