我有這樣的API回應:
{}。
'02/09/2021': {
'ABC': {
'emp': 'A1',
'value': '12421'
},
'DEF': { 'DEF':
'emp': 'D1',
'value': '3345'
},
'GHI': {
'emp': 'G2',
'value': '260048836600'
},
'JKL': {
'emp': 'J1',
'value': '66654654'
}
}' }
} }
并希望以這種格式對一個表格進行規范化處理:
CODE | EMP | VALUE | DATE
========================================
ABC | A1 | 12421 | 02/09/2021 !
DEF | D1 | 3445 | 02/09/2021 ?
GHI | G2 | 260048836600 | 02/09/2021 ?
JKL | J1 | 66654654 | 02/09/2021 !
我試圖做一個爆炸,但我做不到,我怎么能得到這個結果呢?
要重現它:
import json
api_response = {'02/09/2021':{'ABC':{'emp':'A1','value': '12421'},'DEF':{'emp':'D1','value': '3345'},'GHI':{'emp':'G2','value': '260048836600'},'JKL':{'emp': 'J1','value':'66654654'}}}。
rdd = spark.sparkContext.parallelize([json.dumps(api_response)] )
input_df = spark.read.json(rdd)
uj5u.com熱心網友回復:
將你的api回應決議為資料框架的更簡單的方法是首先轉換結果,洗掉關鍵日期并將其放入正文。要將其轉化為一個表格,需要使用stack:
import json
def transform_api_content(api_response)。
for key, value in api_response.items() 。
value['DATE'] = key
yield json.dumps(value)
api_response = {'02/09/2021':{'ABC':{'emp':'A1','value': '12421'},'DEF':{'emp':'D1','value': '3345'},'GHI':{'emp':'G2','value': '260048836600'},'JKL':{'emp': 'J1','value':'66654654'}}。
input_df = spark.read.json(sc.parallelize(transform_api_content(api_response)))
# Hard-coded[/span]。
stack = 'stack(4, "ABC", ABC.emp, ABC.value, "DEF", DEF.emp, DEF.value, "GHI", GHI.emp, GHI.value, "JKL", JKL.emp, JKL.value) AS (CODE, EMP, VALUE)'/span>
output_df = input_df.selectExpr(stack, 'DATE')
output_df.show(truncate=False)
# Dynamic動態。
def stack_columns(dataframe)。
struct_cols = [column for column, schema in dataframe.dtypes if schema.startswith('struct')]
stack_expr = ['"{0}", {0}.emp, {0}.value'.format( column) for columnin struct_cols]
return 'stack({length}, {stack}) AS (CODE, EMP, VALUE)'/span>。 format(length=len(struct_cols), stack=', '.join(stack_expr)
output_df = input_df.selectExpr(stack_columns(input_df), 'DATE'/span>)
output_df.show(truncate=False)
輸出
---- -- ------------ ----------
|code|emp|value |date |
---- --- ------------ ----------
|ABC |A1 |12421 |02/09/2021||
|DEF |D1 |3345 |02/09/2021|
|GHI |G2 |260048836600|02/09/2021|
|JKL |J1 |66654654 |02/09/2021|
---- --- ------------ ----------
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/326413.html
標籤:
上一篇:移除資料框架中兩列重復出現的物件
