【发布时间】:2022-01-25 17:05:43
【问题描述】:
假设我有两个数据框:df, grp_df 是 df.groupby(["region"]).set_list()
df
user item region
james I1 Canada
amy I5 Germany
chris I33 U.S.
grp_df
region Item_lst
Canada [I1, I2,... In]
Germany [ I3, I5, ... In]
U.S. [I33, I22, I11]
... ...
对于每个用户,我想在同一区域内选择以前未购买的新商品并将其添加到新的 pyspark 数据框中。
new_df
user item region
james I2 Canada
amy I3 Germany
chris I22 U.S.
在 pyspark 中最有效的方法是什么?
我的方法:
df = df.join(grp_df, ["region"], "left")
def get_neg_sample(item, item_lst):
return np.random.choice(item_lst.remove(item))
get_neg_sample_udf = udf(get_neg_sample, IntegerType())
df.withColumn("neg_item", get_neg_sample_udf("item", "item_lst))
【问题讨论】:
标签: python apache-spark pyspark