2017-03-01 62 views
2

我有不同的JSON文件JSON數據它和鍵可以在不同的線路,對於如pyspark數據框中添加一列,如果不存在

{"a":1 , "b":"abc", "c":"abc2", "d":"abc3"} 
{"a":1 , "b":"abc2", "d":"abc"} 
{"a":1 ,"b":"abc", "c":"abc2", "d":"abc3"} 

我想aggreagate在列「B」的數據,'c','d'和'f',它不存在於給定的json文件中,但可以存在於其他文件中。因爲不存在列'f',我們可以爲該列取空字符串。

我讀輸入文件和彙總數據這樣

import pyspark.sql.functions as f 
df = spark.read.json(inputfile) 
df2 =df.groupby("b","c","d","f").agg(f.sum(df["a"])) 

這是最後的輸出我想

{"a":2 , "b":"abc", "c":"abc2", "d":"abc3","f":"" } 
{"a":1 , "b":"abc2", "c":"" ,"d":"abc","f":""} 

任何人都可以請幫助?提前致謝!

回答

3

您可以檢查是否科拉姆在數據框中提供並修改df僅在必要時:

if not 'f' in df.columns: 
    df = df.withColumn('f', f.lit('')) 
+0

謝謝你,就這麼簡單。我想我需要再次閱讀文檔。 – gashu

+0

@Mariusz我有兩個數據框。我比較了他們的模式,一個數據幀缺少3列。我有這個列表。 現在我想將這些列添加到丟失這些列的數據框。與空值。我們怎樣才能做到這一點。 – User12345

+0

@Virureddy爲每個缺少的列執行'df = df.withColumn(col_name,lit(None).cast(col_datatype))' – Mariusz

相關問題