gpt4 book ai didi

python - pyspark 'DataFrame' 对象没有属性 '_get_object_id'

转载 作者:行者123 更新时间:2023-12-01 07:27:46 25 4
gpt4 key购买 nike

我正在尝试运行一些代码,但出现错误:

'DataFrame' object has no attribute '_get_object_id'

代码:

items = [(1,12),(1,float('Nan')),(1,14),(1,10),(2,22),(2,20),(2,float('Nan')),(3,300),
(3,float('Nan'))]

sc = spark.sparkContext
rdd = sc.parallelize(items)
df = rdd.toDF(["id", "col1"])

import pyspark.sql.functions as func
means = df.groupby("id").agg(func.mean("col1"))

# The error is thrown at this line
df = df.withColumn("col1", func.when((df["col1"].isNull()), means.where(func.col("id")==df["id"])).otherwise(func.col("col1")))

最佳答案

除非您使用联接,否则您无法在函数内引用第二个 Spark DataFrame。 IIUC,您可以执行以下操作来达到您想要的结果。

假设意味着如下:

#means.show()
#+---+---------+
#| id|avg(col1)|
#+---+---------+
#| 1| 12.0|
#| 3| 300.0|
#| 2| 21.0|
#+---+---------+

id 列上加入 dfmeans,然后应用 when 条件

from pyspark.sql.functions import when

df.join(means, on="id")\
.withColumn(
"col1",
when(
(df["col1"].isNull()),
means["avg(col1)"]
).otherwise(df["col1"])
)\
.select(*df.columns)\
.show()
#+---+-----+
#| id| col1|
#+---+-----+
#| 1| 12.0|
#| 1| 12.0|
#| 1| 14.0|
#| 1| 10.0|
#| 3|300.0|
#| 3|300.0|
#| 2| 21.0|
#| 2| 22.0|
#| 2| 20.0|
#+---+-----+

但在这种情况下,我实际上建议使用 Windowpyspark.sql.functions.mean :

from pyspark.sql import Window
from pyspark.sql.functions import col, mean

df.withColumn(
"col1",
when(
col("col1").isNull(),
mean("col1").over(Window.partitionBy("id"))
).otherwise(col("col1"))
).show()
#+---+-----+
#| id| col1|
#+---+-----+
#| 1| 12.0|
#| 1| 10.0|
#| 1| 12.0|
#| 1| 14.0|
#| 3|300.0|
#| 3|300.0|
#| 2| 22.0|
#| 2| 20.0|
#| 2| 21.0|
#+---+-----+

关于python - pyspark 'DataFrame' 对象没有属性 '_get_object_id',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57363618/

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