通过保留顺序,根据 id 列将 Spark 数据帧拆分为两个数据帧(70% 和 30%)



>我有一个火花数据帧,就像

id  start_time   feature
1   01-01-2018   3.567
1   01-02-2018   4.454
1   01-03-2018   6.455
2   01-02-2018   343.4
2   01-08-2018   45.4
3   02-04-2018   43.56
3   02-07-2018   34.56
3   03-07-2018   23.6

我希望能够根据id 列将其拆分为两个数据帧。因此,我应该按 id 列分组,按start_time排序,并通过保留顺序将 70% 的行放入一个数据帧,将 30% 的行放入另一个数据帧。结果应如下所示:

Dataframe1:
id  start_time   feature
1   01-01-2018   3.567
1   01-02-2018   4.454
2   01-02-2018   343.4
3   02-04-2018   43.56
3   02-07-2018   34.56
Dataframe2:
1   01-03-2018   6.455
2   01-08-2018   45.4
3   03-07-2018   23.6

我正在使用带有python的Spark 2.0。实现这一点的最佳方法是什么?

我必须这样做的方法是创建两个窗口:

w1 =  Window.partitionBy(df.id).orderBy(df.start_time)
w2 =  Window.partitionBy(df.id)
df = df.withColumn("row_number",F.row_number().over(w1))
.withColumn("count",F.count("id").over(w2))
.withColumn("percent",(F.col("row_number")/F.col("count")))
train = df.filter(df.percent<=0.70)
test = df.filter(df.percent>0.70)

最新更新