2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【トリビアのDelta Lake】#1 Pysparkで特定の文字列を削除する

Last updated at Posted at 2022-03-30

Pysparkで、特定のカラムの特定の文字列を削除したい

Pysparkを使って、sparkデータフレーム内の特定のカラムの特定の文字列を削除する方法です。

「Pyspark 特定の文字列 削除」と検索したが、

Pythonで文字列を削除する

一旦Pandasデータフレームに変換するといいですよ

という検索結果しか出ず「あたいはPysparkで文字が消してえんだよ」と嘆かれた方には参考になるかもしれません。

とりあえず、CSVを読み込む

#サンプルデータを定義
sample_data = [{"age": '2', 'name': '✗Alice◎'}, 
               {"age": '5', 'name': '✗Bob◎'}]

#サンプルデータをSparkDataFrame化
df_sample = spark.createDataFrame(sample_data)

#内容確認
df_sample.show()

[結果]
+---+-------+
|age|   name|
+---+-------+
|  2|✗Alice◎|
|  5|  ✗Bob◎|
+---+-------+

サンプルのデータを用意し、Sparkデータフレームにしてみました。
年齢と名前という簡単なデータですが、よく見ると名前にバツ・マルという2つの不要な文字列がくっついています。

このデータのように、システムから自動で引っ張ってくると、たま〜に余計な文字列が付随してくること、ありますよね。
では、ここから邪魔なバツ・マルをPysparkのコマンドを使って削除していきたいと思います。

regexp_replaceを使う

結論、こんな感じで書くことが出来ます!

from pyspark.sql.functions import regexp_replace,col
sample_df_regex = (
    sample_df
    .select(
        "age",
        regexp_replace(col("name"),"✗","").alias("name")
        )
    .select(
        "age",
        regexp_replace(col("name"),"◎","").alias("name")
        )
)

[結果]
+---+-----+
|age| name|
+---+-----+
|  2|Alice|
|  5|  Bob|
+---+-----+

ここではメインとして「regexp_replace」というコマンドを使っています。

regexp_replace(col("<操作したいカラム名>"),"<削除したい文字列>","")

これをSparkデータフレームのオプション「select」内で使うことにより、削除したい文字列を空白にreplaceすることが出来る、つまり削除できるというもの。
削除するというか、空白に置換するってイメージですね!
もちろん置換なので、任意の文字列に変換することも出来るようです。

また、そのままだと操作を加えたカラムの名前が「regexp_replace(col("<操作したいカラム名>"),"<削除したい文字列>",,<カラム番号>」というヘンテコなものになってしまうので、そのあと「.alias("元のカラム名")」を使って元に戻しています。

このやり方の少し面倒なところが、一度に1文字列しか削除できないということ。
このため、バツ・マルを「✗」「◎」の二度に分けて削除しています。
これが少し面倒。Pysparkがもう少し気を利かせくれれば…

今回は以上となります。
ぜひ、上のコマンドに消したい文字列を入れて試してみてくださいね。

このシリーズの目的

クラウドストレージに蓄積された生データ(CSV,JSON等)を加工するのに必要なPysparkの知識を溜めていく、まさにPysparkに関するトリビアのDalta Lakeを目指しています。
Pysparkに関する記事はまだ海外のものが多く、このシリーズが私のような国内の駆け出しデータエンジニアの一助になることを願っています。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?