按日期将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数据集分成两个[重复]的主要内容,如果未能解决你的问题,请参考以下文章

PySpark 分组并逐行应用 UDF 操作

当日期在其他两个日期之间时,如何将数据集连接到另一个 R

如何将数据集拆分为两个具有唯一和重复行的数据集?

如何将数据集拆分为两个具有唯一和重复行的数据集?

将不同单元格中具有两个日期的数据集转换为系列或序列(Google 工作表)

按年份过滤大型数据集