簡體   English   中英

在 PySpark 中使用通配符列名稱將 Spark 數據幀列轉為行

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM