2016-09-09 105 views
0

我正在與數據幀正在與以下結構 enter image description here如何修改火花數據幀的一行中的列值?

在這裏,我需要修改每個記錄,這樣,如果列在post_event_list所列需要填充該列與對應post_column值。因此,在上述兩個記錄的示例中,我需要使用post_col4和post_col5值填充col4和col5。有人可以幫助我在pyspark做到這一點。

回答

3

您可以在pyspark.sql.functions中使用when/otherwise。東西喜歡:

import pyspark.sql.functions as sf 
from pyspark.sql.types import BooleanType 

contains_col4_udf = udf(lambda x: 'col4' in x, BooleanType()) 
df.select(sf.when(contains_col4_udf('post_event_list'), sf.col('post_col4')).otherwise(sf.col('col_4')).alias('col_4')) 

這裏是DOC:https://spark.apache.org/docs/1.6.2/api/python/pyspark.sql.html#pyspark.sql.Column.otherwise

+0

我想你需要''sf.udf()'' – muon

1

也許這是你在pyspark2想要什麼

假設df是數據幀

row = df.rdd.first() 

d = row.asDict() 
d['col4'] = d['post_col4'] 
new_row = pyspark.sql.types.Row(**d) 

現在我們有一個新的行目的;

把這些代碼放在map函數中可以幫助改變所有的df。