按日期将 pyspark 数据集一分为二
Split pyspark dataset into two by date
我有 pyspark 数据集,我想按日期时间列将其分成训练数据集和测试数据集,其中训练数据集的日期时间应小于日期时间列的中位数,测试数据集应包含其余部分
我尝试按日期时间列和 select 上半年对数据集进行排序。但这只解决了训练部分的问题,我不知道如何 "substract" 从 PySpark 中的初始数据集训练数据集
train = data.orderBy('datetime').limit(data.count() // 2)
# test = ?
如果 PySpark 有一些类似于 Pandas tail() 函数的类比,那就太好了,但它没有。
您可以添加一个对日期时间进行排名的列,然后使用排名对数据框进行分区。 percent_rank
函数给出百分位数 iirc。
from pyspark.sql import functions as F
from pyspark.window import Window
data_win = Window.partitionBy().orderBy('datetime')
dt_rank = data.withColumn('percent_rank', F.percent_rank().over(data_win))
train = dt_rank.filter(F.col('percent_rank') <= 0.5)
test = dt_rank.filter(F.col('percent_rank') > 0.5)
我有 pyspark 数据集,我想按日期时间列将其分成训练数据集和测试数据集,其中训练数据集的日期时间应小于日期时间列的中位数,测试数据集应包含其余部分
我尝试按日期时间列和 select 上半年对数据集进行排序。但这只解决了训练部分的问题,我不知道如何 "substract" 从 PySpark 中的初始数据集训练数据集
train = data.orderBy('datetime').limit(data.count() // 2)
# test = ?
如果 PySpark 有一些类似于 Pandas tail() 函数的类比,那就太好了,但它没有。
您可以添加一个对日期时间进行排名的列,然后使用排名对数据框进行分区。 percent_rank
函数给出百分位数 iirc。
from pyspark.sql import functions as F
from pyspark.window import Window
data_win = Window.partitionBy().orderBy('datetime')
dt_rank = data.withColumn('percent_rank', F.percent_rank().over(data_win))
train = dt_rank.filter(F.col('percent_rank') <= 0.5)
test = dt_rank.filter(F.col('percent_rank') > 0.5)