2017-12-20 27 views
0

from pyspark.sql import RowPySpark Row 객체의 변종 복사본을 만드는 방법은 무엇입니까?

A 행 개체는 변경할 수 없습니다. 파이썬 사전으로 변환 한 다음 돌연변이 된 다음 다시 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')