Pyspark - 从数据框创建训练集和测试集

Pyspark - create training set and testing set from dataframe

我有一个如下图所示的数据框。我想用它创建一个训练和测试集。数据集按 CustomerID 和 InvoiceNo 排序。对于每个客户,我想将该客户除最后两行以外的每一行作为训练集,而每个客户的倒数第二行将成为训练集。

理想情况下,结果将是 1 个巨大的训练集和 1 个测试集。使用 PySpark 是否有一种有效的方法来做到这一点?非常感谢您的提前帮助

您始终可以添加一个索引并根据该索引进行筛选——不确定是否有比这更有效的方法。

from pyspark.sql.window import Window
from pyspark.sql import functions as func

window = Window.partitionBy(func.col("CustomerID"))\
        .orderBy(func.col("InvoiceNo").desc())
df = df.select('*', func.rank().over(window).alias('rank'))

train = df.filter("rank > 2")
test = df.filter("rank <= 2")