[解決済み] sparkでデータフレームのカラムを更新する
2023-03-31 14:11:41
質問
新しいspark DataFrame APIを見ると、データフレームのカラムを変更できるかどうかが不明です。
行の値を変更するには、どのようにしたらよいでしょうか。
x
列
y
のようなデータフレームを作成できますか?
で
pandas
であれば、これは
df.ix[x,y] = new_value
編集 : 下記で言われていることをまとめると、既存のデータフレームは不変なので修正できませんが、必要な修正を加えた新しいデータフレームを返すことはできます。
のように、ある条件に基づいてカラムの値を置き換えるだけであれば、そのカラムは
np.where
:
from pyspark.sql import functions as F
update_func = (F.when(F.col('update_col') == replace_val, new_value)
.otherwise(F.col('update_col')))
df = df.withColumn('new_column_name', update_func)
カラムに対して何らかの操作を行い、データフレームに追加される新しいカラムを作成したい場合。
import pyspark.sql.functions as F
import pyspark.sql.types as T
def my_func(col):
do stuff to column here
return transformed_value
# if we assume that my_func returns a string
my_udf = F.UserDefinedFunction(my_func, T.StringType())
df = df.withColumn('new_column_name', my_udf('update_col'))
新しいカラムを古いカラムと同じ名前にしたい場合、追加のステップを追加することができます。
df = df.drop('update_col').withColumnRenamed('new_column_name', 'update_col')
どのように解決するのですか?
カラムをそのまま変更することはできませんが、カラムを操作して、その変更を反映した新しいDataFrameを返すことはできます。そのためには、まず
UserDefinedFunction
を作成し、その関数をターゲットとなるカラムにのみ選択的に適用します。Pythonの場合。
from pyspark.sql.functions import UserDefinedFunction
from pyspark.sql.types import StringType
name = 'target_column'
udf = UserDefinedFunction(lambda x: 'new_value', StringType())
new_df = old_df.select(*[udf(column).alias(name) if column == name else column for column in old_df.columns])
new_df
と同じスキーマを持つようになりました。
old_df
(と同じスキーマになります(仮に
old_df.target_column
は型が
StringType
のような型になります)しかし、カラム
target_column
は
new_value
.
関連
-
[解決済み] PandasでDataFrameの行を反復処理する方法
-
[解決済み] 列の値に基づいてDataFrameから行を選択するにはどうすればよいですか?
-
[解決済み] Pandasのカラム名のリネーム
-
[解決済み] Pandas DataFrameからカラムを削除する
-
[解決済み] Pandasのデータフレームで複数の列を選択する
-
[解決済み] Pandas DataFrameの行数を取得する方法は?
-
[解決済み] 既存のDataFrameに新しい列を追加する方法は?
-
[解決済み] Pandas DataFrameの特定の列の値がNaNである行を削除する方法
-
[解決済み】Pandas DataFrameのカラムヘッダからリストを取得する。
-
[解決済み] データフレームをソートした後にインデックスを更新する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] SQLAlchemy: セッションの作成と再利用
-
[解決済み] PythonでSVGからPNGに変換する
-
[解決済み] googletransがエラー 'NoneType' オブジェクトに 'group' 属性がない、と言って動かなくなった。
-
[解決済み] バブルソートの宿題
-
[解決済み] Pythonの要素別タプル演算(sumなど
-
[解決済み] Django で全てのリクエストヘッダを取得するにはどうすれば良いですか?
-
[解決済み] PyQtアプリケーションのスレッド化。QtスレッドとPythonスレッドのどちらを使うか?
-
[解決済み] Python Empty Generator 関数
-
[解決済み] pycharmがタブをスペースに自動変換する
-
[解決済み] Python の sorted() はどのようなアルゴリズムを使っているのですか?重複