按日期将pyspark数据集分成两个[重复]
Posted
技术标签:
【中文标题】按日期将pyspark数据集分成两个[重复]【英文标题】:Split pyspark dataset into two by date [duplicate] 【发布时间】:2019-08-21 10:11:57 【问题描述】:我有 pyspark 数据集,我想按 datetime 列将其拆分为训练数据集和测试数据集,其中训练数据集的日期时间应小于日期时间列的中位数,而测试数据集应具有其余部分
我尝试按日期时间列对数据集进行排序并选择前半部分。但这只是解决了训练部分的问题,我不知道如何从 PySpark 中的初始数据集中“减去”训练数据集
train = data.orderBy('datetime').limit(data.count() // 2)
# test = ?
如果 PySpark 有一些 Pandas tail() 函数的类比,那就太好了,但它没有。
【问题讨论】:
【参考方案1】:您可以添加一个对日期时间进行排名的列,然后使用排名对数据框进行分区。 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数据集分成两个[重复]的主要内容,如果未能解决你的问题,请参考以下文章