[英]Pivot Spark Dataframe Columns to Rows with Wildcard column Names in PySpark
我正在嘗試使用具有指向另一個表的外鍵的列旋轉 spark Dataframe。 所有這些列名都以FK_<column_name>
開頭。 這種列的數量可以是 1 個或更多。
我希望能夠將列名以FK_
開頭的所有列FK_
為一列中的行,以便我可以加入另一個表。 我不需要另一列中的列名稱,但如果數據透視操作這樣做也很好。
我有示例表
id name dept FK_column1 FK_column2 FK_Column3
1 Alpha ABC 101 102 103
2 Bravo CDE 104 105 106
我正在尋找的輸出
id name dept foreign_keys
1 Alpha ABC 101
1 Alpha ABC 102
1 Alpha ABC 103
2 Bravo CDE 104
2 Bravo CDE 105
2 Bravo CDE 106
您可以獲取名稱以FK_
開頭的列的列表,並構建stack
表達式以對數據FK_
進行反FK_
:
fk_cols = [c for c in df.columns if c.startswith("FK_")]
stack_expr = f"stack({len(fk_cols)}," + ','.join(
[f"'{c.replace('FK_', '')}',{c}" for c in fk_cols]
) + ") as (FK, foreign_keys)"
df.selectExpr("id", "name", "dept", stack_expr).show()
#+---+-----+----+-------+------------+
#| id| name|dept| FK|foreign_keys|
#+---+-----+----+-------+------------+
#| 1|Alpha| ABC|column1| 101|
#| 1|Alpha| ABC|column2| 102|
#| 1|Alpha| ABC|Column3| 103|
#| 2|Bravo| CDE|column1| 104|
#| 2|Bravo| CDE|column2| 105|
#| 2|Bravo| CDE|Column3| 106|
#+---+-----+----+-------+------------+
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.