У меня есть вопрос по PySpark.
df = (sc.parallelize([
{"Day":1,"sensitive_id":"1234", "num":3},
{"Day":1,"sensitive_id":"1234", "num":3},
{"Day":2,"sensitive_id":"1234", "num":3},
{"Day":3,"sensitive_id":"2345", "num":2},
{"Day":3,"sensitive_id":"2345", "num":2},
{"Day":3,"sensitive_id":"6789", "num":4},
{"Day":4,"sensitive_id":"6789", "num":4},
{"Day":4,"sensitive_id":"6789", "num":4},
{"Day":4,"sensitive_id":"6789", "num":4}
]).toDF()
)
Я хочу, чтобы новый столбец имел соответствующий «Sens__ID» в качествемаксимальное значение столбца "num".
Это результат, который я имею до сих пор.
from pyspark.sql import functions as F
from pyspark.sql.window import Window
(
df
.withColumn(
'top_sensitive_id',
F.when
(
F.col('num') == F.max(F.col('num')).over(Window.partitionBy(F.col('Day'))),
F.col('sensitive_id')
)
)
.withColumn
(
'top',
F.max(F.col('top_sensitive_id')).over(Window.partitionBy(F.col('Day')))
)
.show()
)
Но яконечно, должен быть более изящный и эффективный способ сделать это.
Может кто-нибудь предложить лучший способ сделать это?