使用自定义功能改变火花数据框

时间:2017-02-02 23:01:18

标签: python apache-spark pyspark spark-dataframe

有一个带有架构的火花数据框df

{
    'objects' : [{'name': 'a', 'age': 10, 'is_relevant': False},
                 {'name': 'b', 'age': 20, 'is_relevant': True},
                 {'name': 'c', 'age': 30, 'is_relevant': False}]
}

如何向relevant_ages添加新列df,其中包含相关对象的年龄? (每行中只有一个相关对象' s 'objects'

预期结果是:

{
        'objects' : [{'name': 'a', 'age': 10, 'is_relevant': False},
                     {'name': 'b', 'age': 20, 'is_relevant': False},
                     {'name': 'c', 'age': 30, 'is_relevant': True}]
        'relevant_ages': 30
}

我正在使用df.withColumn('relevant_names', my_udf(df.objects))并遇到my_udf问题。

我尝试了不同的方法,例如:

my_udf = udf(lambda x: [o['age'] for o in x if o['is_relevant']][0], IntegerType())

1 个答案:

答案 0 :(得分:0)

上面的代码实际上有效,但我发现spark列表字段没有.get()方法,即下面的代码不起作用:

my_udf = udf(lambda x: [o.get('age', None) for o in x if o.get('is_relevant')][0], IntegerType())