spark列をバイナリフラグである新しい列で上書きします。
列id2を直接上書きしてみましたが、なぜPandasのインプレース操作のように機能しないのですか?
Withcolumn()を使用せずに新しい列を作成し、drop()を使用して古い列を削除せずにそれを行う方法は?
spark dataframeは不変であることがわかります。その理由は、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")
上記の場合、問題なく機能するはずです。
お役に立てれば!
上記のように、不変のコレクションであるDataFrameオブジェクトを上書きすることはできないため、すべての変換は新しいDataFrameを返します。
目的の効果を実現する最速の方法は、withColumn
を使用することです。
df = df.withColumn("col", some expression)
ここで、col
は、「置換」する列の名前です。実行後、df
変数の値は、列col
の新しい値を持つ新しいDataFrameに置き換えられます。これを新しい変数に割り当てることができます。
あなたの場合、それは見ることができます:
df2 = df2.withColumn("id2", (df2.id2 > 0) & (df2.id2 != float('nan')))
nan
を0より大きい値として扱いたくないので、nan
との比較を追加しました。
異なる結合テーブルで同じ名前の複数の列を使用している場合は、withColumnのcolNameでテーブルエイリアスを使用できます。
例えば。 df1.join(df2, df1.id = df2.other_id).withColumn('df1.my_col', F.greatest(df1.my_col, df2.my_col))
また、df1の列のみを保持したい場合は、.select('df1.*')
を呼び出すこともできます。
代わりにdf1.join(df2, df1.id = df2.other_id).withColumn('my_col', F.greatest(df1.my_col, df2.my_col))
を実行する場合
My_colと呼ばれる最後の列を上書きすると思います。したがって、次のように出力されます:id, my_col (df1.my_col original value), id, other_id, my_col (newly computed my_col)