You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PySpark实现13次7天间隔日期扩展数据生成求助

PySpark/Python 实现主表按7天间隔扩展13条记录

需求:把含id和date字段的主表,每条记录生成13条扩展数据,包含id、7的倍数天数(x字段,取值7、14…91),以及仅保留日期部分的计算后日期。

PySpark 实现代码

from pyspark.sql import SparkSession
from pyspark.sql.functions import explode, sequence, lit, date_add, date_format, col

# 初始化Spark会话
spark = SparkSession.builder.appName("DateExpand").getOrCreate()

# 模拟主表数据
data = [
    (1, "2019-02-21 10:00:00"),
    (2, "2019-02-27 09:50:33")
]
df = spark.createDataFrame(data, ["id", "date"])

# 把字符串转成时间戳类型
df = df.withColumn("date", col("date").cast("timestamp"))

# 生成1-13的序列并展开,计算x和新日期
expanded_df = df.withColumn("n", explode(sequence(lit(1), lit(13)))) \
    .withColumn("x", col("n") * 7) \
    .withColumn("date", date_format(date_add(col("date"), (col("n") - 1)*7), "yyyy-MM-dd")) \
    .select("id", "x", "date")

# 查看结果
expanded_df.show(truncate=False)

关键说明

  • sequence(lit(1), lit(13))生成1到13的整数序列,explode将序列拆成单独行,每条原始记录对应13行
  • x是序号乘以7,得到7的倍数(7到91)
  • date_add给原始日期加上(n-1)*7天,date_format提取日期部分去除时分秒

Python(Pandas)实现代码

import pandas as pd
from datetime import timedelta

# 模拟主表数据
data = {
    "id": [1, 2],
    "date": ["2019-02-21 10:00:00", "2019-02-27 09:50:33"]
}
df = pd.DataFrame(data)

# 转成datetime类型
df["date"] = pd.to_datetime(df["date"])

# 每条记录重复13次
expanded_df = df.loc[df.index.repeat(13)].reset_index(drop=True)

# 给每个id的13行生成1-13的序号
expanded_df["n"] = expanded_df.groupby("id").cumcount() + 1

# 计算x和新日期
expanded_df["x"] = expanded_df["n"] * 7
expanded_df["date"] = expanded_df["date"] + expanded_df["n"].apply(lambda x: timedelta(days=(x-1)*7))
expanded_df["date"] = expanded_df["date"].dt.date  # 只保留日期部分

# 筛选需要的列
expanded_df = expanded_df[["id", "x", "date"]]

# 打印结果
print(expanded_df)

关键说明

  • df.index.repeat(13)实现每条记录重复13行
  • groupby("id").cumcount()+1为每个id的13行生成连续序号
  • 用timedelta计算日期偏移,dt.date提取日期部分

内容的提问来源于stack exchange,提问作者rezha nanda

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 17:02:43