from pyspark.sql import Row
PySpark Rowオブジェクトの変異コピーを作成するには?
A行オブジェクトは不変です。それをPython辞書に変換してから、Rowオブジェクトに変換して戻すことができます。辞書に変換して行に戻すことなく、変更可能なコピーや改ざんされたコピーを作成する方法はありますか?
これは、mapPartitionsで実行される関数で必要です。
from pyspark.sql import Row
PySpark Rowオブジェクトの変異コピーを作成するには?
A行オブジェクトは不変です。それをPython辞書に変換してから、Rowオブジェクトに変換して戻すことができます。辞書に変換して行に戻すことなく、変更可能なコピーや改ざんされたコピーを作成する方法はありますか?
これは、mapPartitionsで実行される関数で必要です。
実際のユースケースによっては、既存のものから新しいRowオブジェクトを作成することも可能です。
from pyspark.sql import Row
R = Row('a', 'b', 'c')
r = R(1,2,3)
のはr
から新しい行オブジェクトを作成し、我々はr
ため3
にa
を変更したいとしましょう:
R(3, r.b, r.c)
# Row(a=3, b=2, c=3)
r
はまだですが:ここ
r
# Row(a=1, b=2, c=3)
です突然変異したコピーを作るためのダイナミックな解決策を考えました:
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')