gpt4 book ai didi

dataframe - pyspark 数据帧总和

转载 作者:行者123 更新时间:2023-12-01 03:13:43 27 4
gpt4 key购买 nike

我正在尝试对 pyspark.sql.dataframe 执行以下操作

from pyspark.sql.functions import sum as spark_sum
df = spark.createDataFrame([
('a', 1.0, 1.0), ('a',1.0, 0.2), ('b', 1.0, 1.0),
('c' ,1.0, 0.5), ('d', 0.55, 1.0),('e', 1.0, 1.0)
])
>>> df.show()
+---+----+---+
| _1| _2| _3|
+---+----+---+
| a| 1.0|1.0|
| a| 1.0|0.2|
| b| 1.0|1.0|
| c| 1.0|0.5|
| d|0.55|1.0|
| e| 1.0|1.0|
+---+----+---+

然后,我正在尝试执行以下操作。

1)选择列 df[_2]时的行> df[_3]
2)对于从上面选择的每一行,乘以 df[_2] * df[_3] ,然后取它们的总和

3) 将上面的结果除以 df[_3] 列的总和

这是我所做的:
>>> filter_df = df.where(df['_2'] > df['_3'])
>>> filter_df.show()
+---+---+---+
| _1| _2| _3|
+---+---+---+
| a|1.0|0.2|
| c|1.0|0.5|
+---+---+---+

>>> result = spark_sum(filter_df['_2'] * filter_df['_3'])
/ spark_sum(filter_df['_3'])

>>> df.select(result).show()
+--------------------------+
|(sum((_2 * _3)) / sum(_3))|
+--------------------------+
| 0.9042553191489361|
+--------------------------+

但答案应该是 (1.0 * 0.2 + 1.0 * 0.5)/(0.2+0.5) = 1.0
这是不正确的。什么??

在我看来,这样的操作只对原来的 df 进行了,但不是 filter_df .跆拳道?

最佳答案

您需要在 filter_df 中调用它。

>>> result = spark_sum(filter_df['_2'] * filter_df['_3']) 
/ spark_sum(filter_df['_3'])

这是一个转换函数,它返回一个列并应用于我们应用它的数据帧(延迟评估)。 Sum 是一个聚合函数,在没有任何组的情况下调用时,它适用于整个数据集。

>>> filter_df.select(result).show()
+--------------------------+
|(sum((_2 * _3)) / sum(_3))|
+--------------------------+
| 1.0|
+--------------------------+

关于dataframe - pyspark 数据帧总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50312952/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com