如何修改spark数据帧的一行中的列值?

时间:2016-09-09 13:06:44

标签: apache-spark pyspark spark-dataframe

我正在处理具有以下结构的数据框架 enter image description here

这里我需要修改每条记录,这样如果post_event_list中列出了一列,我需要用相应的post_column值填充该列。因此,在上述两个记录的示例中,我需要使用post_col4和post_col5值填充col4和col5。有人可以帮我在pyspark做这件事。

2 个答案:

答案 0 :(得分:7)

也许这就是你想要的pyspark2

假设df是DataFrame

row = df.rdd.first()

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

现在我们有一个新的Row对象;

将这些代码放在地图函数中可以帮助改变所有df。

答案 1 :(得分: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'))

以下是文档:https://spark.apache.org/docs/1.6.2/api/python/pyspark.sql.html#pyspark.sql.Column.otherwise