我有一個如下所示的資料框:
------- ------- --------------------
| user| item| ls_rec_items|
------- ------- --------------------
| 321| 3| [4, 3, 2, 6, 1, 5]|
| 123| 2| [5, 6, 3, 1, 2, 4]|
| 123| 7| [5, 6, 3, 1, 2, 4]|
------- ------- --------------------
我想知道“專案”在“ls_rec_items”陣列中的哪個位置。
我知道函式array_position,但我不知道如何在那里獲取“專案”值。
我知道這一點:
df.select(F.array_position(df.ls_rec_items, 3)).collect()
但我想要這個:
df.select(F.array_position(df.ls_rec_items, df.item)).collect()
輸出應如下所示:
------- ------- -------------------- -----
| user| item| ls_rec_items| pos|
------- ------- -------------------- -----
| 321| 3| [4, 3, 2, 6, 1, 5]| 2|
| 123| 2| [5, 6, 3, 1, 2, 4]| 5|
| 123| 7| [5, 6, 3, 1, 2, 4]| 0|
------- ------- -------------------- -----
uj5u.com熱心網友回復:
你可以用expr與array_position這樣的:
from pyspark.sql import SparkSession
import pyspark.sql.functions as F
if __name__ == "__main__":
spark = SparkSession.builder.getOrCreate()
data = [
{"user": 321, "item": 3, "ls_rec_items": [4, 3, 2, 6, 1, 5]},
{"user": 123, "item": 2, "ls_rec_items": [5, 6, 3, 1, 2, 4]},
{"user": 123, "item": 7, "ls_rec_items": [5, 6, 3, 1, 2, 4]},
]
df = spark.createDataFrame(data)
df = df.withColumn("pos", F.expr("array_position(ls_rec_items, item)"))
結果
---- ------------------ ---- ---
|item| ls_rec_items|user|pos|
---- ------------------ ---- ---
| 3|[4, 3, 2, 6, 1, 5]| 321| 2|
| 2|[5, 6, 3, 1, 2, 4]| 123| 5|
| 7|[5, 6, 3, 1, 2, 4]| 123| 0|
---- ------------------ ---- ---
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/350180.html
