gpt4 book ai didi

apache-spark - 如何用新列覆盖 Spark 数据框中的整个现有列?

转载 作者:行者123 更新时间:2023-12-04 09:58:05 24 4
gpt4 key购买 nike

我想用一个二进制标志的新列覆盖一个 Spark 列。

我尝试直接覆盖列 id2 但为什么它不像 Pandas 中的就地操作那样工作?

如何在不使用 withcolumn() 创建新列和 drop() 删除旧列的情况下做到这一点?

我知道 spark 数据框是不可变的,这是原因还是有不同的覆盖方式而不使用 withcolumn() 和 drop()?

    df2 = spark.createDataFrame(
[(1, 1, float('nan')), (1, 2, float(5)), (1, 3, float('nan')), (1, 4, float('nan')), (1, 5, float(10)), (1, 6, float('nan')), (1, 6, float('nan'))],
('session', "timestamp1", "id2"))

df2.select(df2.id2 > 0).show()

+---------+
|(id2 > 0)|
+---------+
| true|
| true|
| true|
| true|
| true|
| true|
| true|
+---------+
# Attempting to overwriting df2.id2
df2.id2=df2.select(df2.id2 > 0).withColumnRenamed('(id2 > 0)','id2')
df2.show()
#Overwriting unsucessful
+-------+----------+----+
|session|timestamp1| id2|
+-------+----------+----+
| 1| 1| NaN|
| 1| 2| 5.0|
| 1| 3| NaN|
| 1| 4| NaN|
| 1| 5|10.0|
| 1| 6| NaN|
| 1| 6| NaN|
+-------+----------+----+

最佳答案

你可以使用

d1.withColumnRenamed("colName", "newColName")
d1.withColumn("newColName", $"colName")
withColumnRenamed将现有列重命名为新名称。 withColumn创建一个具有给定名称的新列。如果已经存在,它会创建一个具有相同名称的新列并删除旧列。
在您的情况下,更改不会应用于原始数据框 df2,它会更改列的名称并作为新数据框返回,该数据框应分配给新变量以供进一步使用。
d3 = df2.select((df2.id2 > 0).alias("id2"))
以上应该适用于您的情况。
希望这有帮助!

关于apache-spark - 如何用新列覆盖 Spark 数据框中的整个现有列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44623461/

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