当前位置: 首页 > 面试题库 >

将时间序列pySpark数据帧拆分为测试和训练,而无需使用随机拆分

葛昱
2023-03-14
问题内容

我有一个火花时间序列数据框。我想将其拆分为80-20(训练测试)。由于这是 时间序列数据帧
,因此我不想进行随机拆分。为了将第一个数据帧传递到训练中并传递第二个数据帧进行测试,我该如何做?


问题答案:

您可以pyspark.sql.functions.percent_rank()用来获取按时间戳/日期列排序的DataFrame的百分位排名。然后选择所有列rank <= 0.8作为训练集,其余作为测试集。

例如,如果您具有以下DataFrame:

df.show(truncate=False)
#+---------------------+---+
#|date                 |x  |
#+---------------------+---+
#|2018-01-01 00:00:00.0|0  |
#|2018-01-02 00:00:00.0|1  |
#|2018-01-03 00:00:00.0|2  |
#|2018-01-04 00:00:00.0|3  |
#|2018-01-05 00:00:00.0|4  |
#+---------------------+---+

您需要训练集中的前4行和训练集中的最后一行。首先添加一列rank

from pyspark.sql.functions import percent_rank
from pyspark.sql import Window

df = df.withColumn("rank", percent_rank().over(Window.partitionBy().orderBy("date")))

现在使用rank将数据拆分为traintest

train_df = df.where("rank <= .8").drop("rank")
train_df.show()
#+---------------------+---+
#|date                 |x  |
#+---------------------+---+
#|2018-01-01 00:00:00.0|0  |
#|2018-01-02 00:00:00.0|1  |
#|2018-01-03 00:00:00.0|2  |
#|2018-01-04 00:00:00.0|3  |
#+---------------------+---+

test_df = df.where("rank > .8").drop("rank")
test_df.show()
#+---------------------+---+
#|date                 |x  |
#+---------------------+---+
#|2018-01-05 00:00:00.0|4  |
#+---------------------+---+


 类似资料:
  • 我有下面的spark数据框架。 我必须将上面的数据帧列拆分为多个列,如下所示。 我尝试使用分隔符进行拆分;和限制。但是它也将主题拆分为不同的列。姓名和年龄被组合在一起成一列。我要求所有主题在一列中,只有姓名和年龄在单独的列中。 这在Pyspark有可能实现吗?

  • 我刚刚开始使用R,我不确定如何将我的数据集与以下示例代码结合起来: 我有一个数据集,我需要将其放入训练(75%)和测试(25%)集中。我不确定应该将哪些信息放入x和大小?x是数据集文件吗?我有多少样本?

  • 问题内容: 我有一个很大的数据集,想将其分为训练(50%)和测试集(50%)。 假设我有100个示例存储了输入文件,每一行包含一个示例。我需要选择50条线作为训练集和50条线测试集。 我的想法是首先生成一个长度为100(值范围从1到100)的随机列表,然后将前50个元素用作50个训练示例的行号。与测试集相同。 这可以在Matlab中轻松实现 但是如何在Python中完成此功能?我是Python的新

  • 我正在Spark 3.0.0上执行Spark结构流的示例,为此,我使用了twitter数据。我在Kafka中推送了twitter数据,单个记录如下所示 2020-07-21 10:48:19|1265200268284588034|RT@narendramodi:与@IBM首席执行官@ArvindKrishna先生进行了广泛的互动。我们讨论了几个与技术相关的主题,…|印度海得拉巴 在这里,每个字段

  • 有一个数据帧,它总共由14列组成,最后一列是整数值为0或1的目标标签。 我已经定义了- X=df。iloc[:,1:13]——由特征值组成 两者的长度相同,X是由13列组成的数据帧,shape(159880,13),y是具有shape(159880,)的数组类型 但是,当我在X,y上执行列车测试分割时,该功能无法正常工作。 下面是简单的代码- X_序列,y_序列,X_测试,y_测试=序列测试分割(

  • 问题内容: 我正在尝试运行以下Colab项目,但是当我想将训练数据分为验证和训练部分时,出现此错误: 我使用以下代码: 如何解决此错误? 问题答案: 根据Tensorflow Dataset docs ,百分比拆分是可能的,例如 如示例所示,更改列表时,您的代码将起作用: 使用上面的代码,有2590个条目,而有1080个。