此代碼在 aws 膠水作業中使用:
def get_latest_records(data_frame, record_keys, key):
columns = data_frame.columns
window_spec = w.partitionBy(*record_keys).orderBy(f.desc(key))
output_data_frame = data_frame.withColumn("row_num", f.row_number().over(window_spec)). \
filter(f.col("row_num") == 1). \
drop(f.col("row_num")). \
select(columns)
return data_frame
我想根據名為“名稱”的列對動態幀資料進行排序,然后如果兩個名稱相等,則按“鍵”列排序。這個怎么做?另外,您能解釋一下(drop)在 output_data_frame 中的作用嗎?
uj5u.com熱心網友回復:
假設 for 的值record_keys是一個具有單個值的可迭代物件,"name"這應該已經完成??了。
你應該這樣呼叫函式:
output_df = get_latest_records(
data_frame=input_df, # The name of the dataframe you want to process
record_keys=["name"],
key="key",
)
這是怎么回事?
代碼以這種方式按“名稱”列對資料進行磁區,并在每個磁區內按“鍵”按降序對其進行排序。在每個磁區內,它還使用將行號順序添加到磁區中的每一行row_num的row_number()函式添加一個新列。
通過row_num使用值 1 進行過濾,您可以從磁區中獲得第一行,這是您要查找的資料點。然后再次洗掉人工列row_num,因為您在外部不需要它,并且您從原始資料框中回傳所有列。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/529202.html
