2017-02-02 230 views
0

有火花數據框df與架構:變異火花數據幀

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

如何添加新列relevant_agesdf其中將包含有關對象的年齡? (有只有一個中的每一行的'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

您的UDF代碼是確定的。你可以發佈'df.printSchema()'結果嗎?你使用什麼火花版本?當你使用UDF時,什麼是錯誤信息? – Mariusz

+0

哦,確實有效,對不起!我嘗試使用 'my_udf = udf(lambda x:[o.get('age',None)for o in x if o.get('is_relevant')] [0],IntegerType())'工作。我想沒有.get()方法實施列表中的火花 – MaxPY

回答

0

上面的代碼實際上是工作,但我發現火花列表字段沒有獲得()方法,即下面這段代碼會不工作:

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