【问题标题】:Pyspark: How do I get today's score and 30 day avg score in a single rowPyspark:如何在一行中获得今天的分数和 30 天的平均分数
【发布时间】:2019-09-03 17:04:51
【问题描述】:

我有一个用例,我想将今天的排名以及 30 天的平均值作为一列。该数据具有特定 ID 和类型的 30 天数据。数据如下:-

  Id     Type        checkInDate      avgrank
   1     ALONE       2019-04-24      1.333333
   1     ALONE       2019-03-31      34.057471
   2     ALONE       2019-04-17      1.660842
   1     TOGETHER    2019-04-13      19.500000
   1     TOGETHER    2019-04-08      5.481203
   2     ALONE       2019-03-29      122.449156
   3     ALONE       2019-04-07      3.375000
   1     TOGETHER    2019-04-01      49.179719
   5     TOGETHER    2019-04-17      1.391753
   2     ALONE       2019-04-22      3.916667
   1     ALONE       2019-04-15      2.459151

作为我的结果,我希望有类似的输出

  Id     Type        TodayAvg        30DayAvg
   1     ALONE       30.0            9.333333
   1     TOGETHER    1.0             34.057471
   2     ALONE       7.8             99.660842
   2     TOGETHER    3               19.500000

。 .

我认为我可以实现它的方式是拥有 2 个数据帧,一个对今天的日期进行过滤,第二个数据帧平均超过 30 天,然后加入今天的 ID 和类型数据帧

rank = glueContext.create_dynamic_frame.from_catalog(database="testing", table_name="rank", transformation_ctx="rank")

filtert_rank = Filter.apply(frame=rank, f=lambda x: (x["checkInDate"] == curr_dt))

rank_avg = glueContext.create_dynamic_frame.from_catalog(database="testing", table_name="rank", transformation_ctx="rank_avg")

rank_avg_f = rank_avg.groupBy("id", "type").agg(F.mean("avgrank"))

rank_join = filtert_rank.join(rank_avg, ["id", "type"], how='inner')

有没有更简单的方法,即不读取数据帧两次?

【问题讨论】:

  • 我不太了解您在那里使用的数据集,但是在进行均值的平均(即 F.mean("avgrank") )时请谨慎行事,它可能不会给你你想要的,见en.wikipedia.org/wiki/Grand_mean
  • 计算不加到输出中。例如。对于 id = 1 和 type= Alone,平均值计算为 12.62 另外供参考 curr_dt 的值是多少?

标签: apache-spark pyspark apache-spark-sql aws-glue


【解决方案1】:

您可以将动态帧转换为apache spark数据帧并执行常规sql。

查看 toDF() 和 sparksql 的文档。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-23
    • 1970-01-01
    • 2021-11-11
    • 2013-08-22
    • 1970-01-01
    • 1970-01-01
    • 2012-01-01
    • 1970-01-01
    相关资源
    最近更新 更多