我有一个spark数据框架包含以下模式:
StructField(email_address,StringType,true),StructField(subject_line,StringType,true)))
我想随机抽取50%的人口作为对照和测试。目前我是这样做的:
df_segment_ctl = df_segment.sample(False, 0.5, seed=0)
df_segment_tmt = df_segment.join(df_segment_ctl, ["email_address"], "leftanti")
但我确信一定有一个更好的方法来创建一个列,而不是像下面的
| email_address| segment_id|group |
+--------------------+---------------+---------+
|xxxxxxxxxx@gmail.com| 1.1|treatment|
| xxxxxxx@gmail.com| 1.6|control |
任何帮助都是感激的。我对这个世界是陌生的
更新:我不想把数据框分成两个。只是想添加一个指示列
更新:有可能优雅地进行多次分裂吗?假设我想要一个对照和两个治疗组,而不是两个组
| email_address| segment_id|group |
+--------------------+---------------+---------+
|xxxxxxxxxx@gmail.com| 1.1|treat_1. |
| xxxxxxx@gmail.com| 1.6|control |
| xxxxx@gmail.com | 1.6|treat_2 |
您可以使用如下所示的随机分割来分割spark数据框
df_segment_ctl, df_segment_tmt = df_segment.randomSplit(weights=[0.5,0.5], seed=0)