【问题标题】:Generate repeating row number based on partition column in pyspark根据pyspark中的分区列生成重复行号
【发布时间】:2020-04-28 11:45:38
【问题描述】:

我想生成如下所示的季度列,在 pyspark 中每个 l_id 编号的每 4 条记录应该更改一次之后。在生成季度列之前,将根据 l_id 和周列对数据进行排序。

【问题讨论】:

  • 您可以使用 spark 窗口函数来实现相同的功能,如果您尝试过共享,那将是很好的开始。
  • 我试过但没有找到任何解决方案。如果您在窗口功能中分享示例将非常有帮助

标签: python pyspark window


【解决方案1】:

我的错,我认为您的数据框中已经存在一个季度列,但您似乎需要一个看起来像季度的列。我认为这不可能通过 Window 函数实现,但这是实现此目的的一种方法:

假设您当前的数据在 df 中。

from pyspark.sql.functions import split

split_col = split(df["week"],'month')
df = df.withColumn("quaterly", (split_col.getItem(1).cast("integer")/(df["sequence_change"] + lit(1))).cast("integer") + lit(1)).orderBy("l_id","week")

逻辑解释: 我们将从week 列值中获取月份编号,将其转换为字符串中的整数,然后将其除以sequence_change value + 1 并将最终值转换为整数,这样您就可以得到一个不带小数的整数值.最后在其中添加 1,使quaterly 列以 1 而不是 0 开头。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-11-30
    • 1970-01-01
    • 2019-08-29
    • 2018-10-13
    • 1970-01-01
    • 1970-01-01
    • 2018-12-09
    相关资源
    最近更新 更多