さまざまなjsonファイルにjsonデータがあり、キーは行ごとに異なる場合があります。たとえば、
{"a":1 , "b":"abc", "c":"abc2", "d":"abc3"}
{"a":1 , "b":"abc2", "d":"abc"}
{"a":1 ,"b":"abc", "c":"abc2", "d":"abc3"}
列「b」、「c」、「d」、「f」のデータを集計したいのですが、指定されたjsonファイルには存在しませんが、他のファイルには存在する可能性があります。 SO列 '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":""}
誰か助けてくれますか?前もって感謝します!
列がデータフレームで利用可能かどうかを確認し、必要な場合にのみdf
を変更できます。
if not 'f' in df.columns:
df = df.withColumn('f', f.lit(''))
ネストされたスキーマでは、以下のようにdf.schema
を使用する必要がある場合があります。
>>> df.printSchema()
root
|-- a: struct (nullable = true)
| |-- b: long (nullable = true)
>>> 'b' in df.schema['a'].dataType.names
True
>>> 'x' in df.schema['a'].dataType.names
False