from pyspark.sql import Row
PySpark Row 객체의 변종 복사본을 만드는 방법은 무엇입니까?
A 행 개체는 변경할 수 없습니다. 파이썬 사전으로 변환 한 다음 돌연변이 된 다음 다시 Row 객체로 변환 할 수 있습니다. 사전으로 변환하고 다시 행으로 변환하지 않고 변경 가능하거나 변형 된 사본을 만드는 방법이 있습니까?
이것은 mapPartitions에서 실행되는 함수에서 필요합니다.
from pyspark.sql import Row
PySpark Row 객체의 변종 복사본을 만드는 방법은 무엇입니까?
A 행 개체는 변경할 수 없습니다. 파이썬 사전으로 변환 한 다음 돌연변이 된 다음 다시 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')