有一个带有架构的火花数据框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())
答案 0 :(得分:0)
上面的代码实际上有效,但我发现spark列表字段没有.get()方法,即下面的代码不起作用:
my_udf = udf(lambda x: [o.get('age', None) for o in x if o.get('is_relevant')][0], IntegerType())