我试图收集'2 user\u id dataframes',它们在pyspark中没有相同的user\u id。
所以,我在下面输入了一些代码你可以看到
import pyspark.sql.functions as f
query = "select * from tb_original"
df_original = spark.sql(query)
df_original = df_original.select("user_id").distinct()
df_a = df_original.sort(f.rand()).limit(10000)
df_a.count()
# df_a: 10000
df_b = df_original.join(df_a,on="user_id",how="left_anti").sort(f.rand()).limit(10000)
df_b.count()
# df_b: 10000
df_a.join(df_b,on="user_id",how="left_anti").count()
# df_a - df_b = 9998
# What?????
因此,df\u a和df\u b
具有相同的2个用户标识。。。有时是1或0。
代码看起来没问题。然而,这可能是由于spark机制的懒惰行为造成的。。。
我需要解决这个问题来收集'2 user\u id dataframes',它们相互之间没有相同的user\u id。
2条答案
按热度按时间vsikbqxv1#
由于您希望从给定的用户池中生成两个不同的用户集,并且没有重叠,因此可以使用以下简单技巧:=
如果你的用户id本身是一个整数,你不需要创建一个新的唯一id列,你可以直接使用它。
qrjkbowd2#
我选择pyspark支持的“randomSplit”函数。
永远不要再在dfu a和dfu b之间发生冲突!