1 回答

TA貢獻1963條經驗 獲得超6個贊
使用 PySpark 解決了這個問題:
我首先創建了另一個列,其中包含每個用戶的所有到期日期數組:
joined_array = df.groupBy('user_id').agg(collect_set('expiration_date'))
然后將該數組加入到原始數據幀中:
joined_array = joined_array.toDF('user_idDROP', 'expiration_date_array')
df = df.join(joined_array, df.user_id == joined_array.user_idDROP, how = 'left').drop('user_idDROP')
然后創建一個函數來遍歷數組,如果創建日期大于到期日期,則將計數加 1:
def check_expiration_count(created_at, expiration_array):
if not expiration_array:
return 0
else:
count = 0
for i in expiration_array:
if created_at > i:
count += 1
return count
check_expiration_count = udf(check_expiration_count, IntegerType())
然后應用該函數創建一個具有正確計數的新列:
df = df.withColumn('count_of_subs_ending_before_creation', check_expiration_count(df.created_at, df.expiration_array))
瓦拉。完畢。謝謝大家(沒有人幫忙,但還是謝謝)。希望有人在 2022 年發現這很有用
添加回答
舉報