我想使用以月为单位的比率和unix epoch列将sparkDataframe拆分为2-
示例Dataframe如下所示-
unixepoch
---------
1539754800
1539754800
1539931200
1539927600
1539927600
1539931200
1539931200
1539931200
1539927600
1540014000
1540014000
1540190400
1540190400
1540190400
1540190400
1540190400
1540190400
1540190400
1540190400
1540190400
1540190400
1540190400
1540190400
1540190400
分裂策略-
如果给定数据的总月数为30个月,拆分比率为0.6,则预期Dataframe1应具有:300.6=18个月的数据,预期Dataframe1应具有:300.4=12个月的数据
编辑-1
大多数答案都是通过考虑记录数的分割比得出的,即如果总记录数=100,分割比=0.6,则split1df~=60条记录,split2df~=40条记录。更清楚地说,这不是我要找的。这里给出了月份的分割率,可以通过上述示例Dataframe中给定的epoch unix timestamp列来计算。假设上面的epoch列是30个月的分布,那么我想要Dataframe1中的前18个月epoch和第二个Dataframe中的最后12个月epoch行。您可以将其视为spark中timeseries数据的Dataframe分割。
编辑-2
如果数据为2018年7月至2019年5月=10个月数据,则split1(0.6=前6个月)=(2018年7月至2019年1月)和split2(0.4=后4个月)=(2019年2月至2019年5月)。我不应该在那里。
2条答案
按热度按时间4si2a6ki1#
我把数据分为几个月,如果数据是一个月的话,那么是几天。
我更喜欢这个方法,因为这个答案不依赖于窗口函数。这里给出的另一个答案是
Window without partitionBy
这严重降低了性能的数据洗牌到一个执行器。1. 以月为单位给出列车运行率的分裂法
2. 使用跨年多个月的数据进行测试
3. 使用一年中一个月的数据进行测试
xxhby3vn2#
使用
row_number
&filter
将数据分成两个Dataframe。