gpt4 book ai didi

python - `df.loc` 的 pyspark 等价物?

转载 作者:太空狗 更新时间:2023-10-30 00:01:12 25 4
gpt4 key购买 nike

我正在寻找 Pandas 数据框的 pyspark 等价物。特别是,我想对 pyspark 数据帧执行以下操作

# in pandas dataframe, I can do the following operation
# assuming df = pandas dataframe
index = df['column_A'] > 0.0
amount = sum(df.loc[index, 'column_B'] * df.loc[index, 'column_C'])
/ sum(df.loc[index, 'column_C'])

我想知道对 pyspark 数据框执行此操作的 pyspark 等价物是什么?

最佳答案

Spark DataFrame 没有严格的顺序,因此索引没有意义。相反,我们使用类似 SQL 的 DSL。此处您将使用 where(filter)和 select。如果数据看起来像这样:

import pandas as pd
import numpy as np
from pyspark.sql.functions import col, sum as sum_

np.random.seed(1)

df = pd.DataFrame({
c: np.random.randn(1000) for c in ["column_A", "column_B", "column_C"]
})

数量 将是

amount
# 0.9334143225687774

与 Spark 等价的是:

sdf = spark.createDataFrame(df)

(amount_, ) = (sdf
.where(sdf.column_A > 0.0)
.select(sum_(sdf.column_B * sdf.column_C) / sum_(sdf.column_C))
.first())

结果在数值上是等价的:

abs(amount - amount_)
# 1.1102230246251565e-16

你也可以使用条件:

from pyspark.sql.functions import when

pred = col("column_A") > 0.0

amount_expr = sum_(
when(pred, col("column_B")) * when(pred, col("column_C"))
) / sum_(when(pred, col("column_C")))

sdf.select(amount_expr).first()[0]
# 0.9334143225687773

它看起来更像 Pandas,但更冗长。

关于python - `df.loc` 的 pyspark 等价物?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50311732/

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