微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何根据多个条件过滤掉RDD?

如何解决如何根据多个条件过滤掉RDD?

出于说明目的,我有一个包含 3 列 (X,Y,Z) 的数据集。现在,我想计算 2001 年到 2008 年之间一年的 Total zAvg z 值。

要过滤掉年份,我知道:

ps2 = ps1.filter(lambda x: int(x[0])>2001 and int(x[0])<2008)

但是如何为每年创建一个包含 total_zavg_z 值的新列?

enter image description here

解决方法

我不确定您是否只想要每年的平均值,但如果您想要,请使用简单聚合:

 p2.groupby('X').avg('Z')

给你一个结果:

+----+------+
|   X|avg(Z)|
+----+------+
|2003| 600.0|
|2002| 262.5|
+----+------+

如果您需要保留 Y 列并像这样复制相同的平均结果:

+----+---+---+-----+
|   X|  Y|  Z|  avg|
+----+---+---+-----+
|2003| FL|600|600.0|
|2002| NY|300|262.5|
|2002| AZ|225|262.5|
+----+---+---+-----+

此代码应该可以帮助您:

    p2 = df.filter((df['X'] > 2001) & (df['X'] < 2008))
    partitioned = Window.partitionBy('X')
    result = p2.withColumn('avg',avg('Z').over(partitioned))
    result.show()

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。