我想覆蓋一個新的列是一個二進制標誌的火花列。如何用新列覆蓋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|
+-------+----------+----+
星星之火可以」像熊貓這樣寫就地,如果這是你正在尋找。數據幀是不可變的結構,它們不能被覆蓋。 – eliasah