所以,我在 pyspark 上遇到了一項棘手的任務。我需要使用下面兩個資料框中的資料創建一個新的資料框。第一個被稱為app_daily_users:
| 日期 | APP_1 | APP_2 | APP_3 | APP_4 | APP_5 |
|---|---|---|---|---|---|
| 2020-01-01 | 105190 | 1000 | 100140 | 230380 | 167456 |
| 2020-01-02 | 91170 | 5000 | 102103 | 228988 | 171698 |
| 2020-01-03 | 79110 | 4000 | 412130 | 215554 | 214412 |
| 2020-01-04 | 130859 | 4000 | 61660 | 331125 | 335510 |
第二個被稱為correction:
| 日期 | CORRECTION_INDEX |
|---|---|
| 2020-01-01 | 0.458 |
| 2020-01-02 | 0.589 |
| 2020-01-03 | 0.988 |
| 2020-01-04 | 0.477 |
我需要將“應用每日用戶”上的每一列乘以“更正”資料幀上的更正索引。所以最后我會有這樣的東西(只是一個簡單的例子):
| 日期 | APP_1 | APP_2 | APP_3 | APP_4 | APP_5 |
|---|---|---|---|---|---|
| 2020-01-01 | 48.180 | 458 | 45864 | 105514 | 76694 |
上面各列的值是 2020 年 1 月 1 日第一個資料幀上的值,0.458是當天的修正指數。你們能幫我解決這個問題嗎?
謝謝!
uj5u.com熱心網友回復:
只需加入,DATE然后使用帶有選擇運算式的串列推導來應用乘法:
from pyspark.sql import functions as F
result = app_daily_users.join(correction, ["DATE"], "left").select(
"DATE",
*[(F.col(c) * F.col("CORRECTION_INDEX")).alias(c)
for c in app_daily_users.columns if c != "DATE"
]
)
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/430850.html
標籤:Python 数据框 阿帕奇火花 pyspark apache-spark-sql
上一篇:將數字和日期拆分為單獨的列
