輸入資料框:
| 物品 | 大號 | W | H |
|---|---|---|---|
| I1 | 3 | 5 | 8 |
| I2 | 2 | 1 | 2 |
| I3 | 6 | 9 | 1 |
| I4 | 7 | 3 | 4 |
輸出資料框應如下所示。通過檢查 L、W、H 列中的值創建 3 個新列:L_n、W_n、H_n。L_n 是最長維度,W_n 是中等維度,H_n 是最短維度。
| 物品 | 大號 | W | H | L_n | W_n | H_n |
|---|---|---|---|---|---|---|
| I1 | 3 | 5 | 8 | 8 | 5 | 3 |
| I2 | 2 | 1 | 2 | 2 | 2 | 1 |
| I3 | 6 | 9 | 1 | 9 | 6 | 1 |
| I4 | 7 | 3 | 4 | 7 | 4 | 3 |
uj5u.com熱心網友回復:
我建議創建一個陣列 ( array),對其進行排序 ( array_sort) 并逐個選擇元素 ( element_at)。
from pyspark.sql import functions as F
df = spark.createDataFrame(
[('I1', 3, 5, 8),
('I2', 2, 1, 2),
('I3', 6, 9, 1),
('I4', 7, 3, 4)],
['Item', 'L', 'W', 'H']
)
arr = F.array_sort(F.array('L', 'W', 'H'))
df = df.select(
'*',
F.element_at(arr, 3).alias('L_n'),
F.element_at(arr, 2).alias('W_n'),
F.element_at(arr, 1).alias('H_n'),
)
df.show()
# ---- --- --- --- --- --- ---
# |Item| L| W| H|L_n|W_n|H_n|
# ---- --- --- --- --- --- ---
# | I1| 3| 5| 8| 8| 5| 3|
# | I2| 2| 1| 2| 2| 2| 1|
# | I3| 6| 9| 1| 9| 6| 1|
# | I4| 7| 3| 4| 7| 4| 3|
# ---- --- --- --- --- --- ---
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/494576.html
標籤:阿帕奇火花 pyspark apache-spark-sql 相比 多列
上一篇:回傳按鍵排序的地圖值
