LoginSignup
0
0

More than 1 year has passed since last update.

PySpark なんちゃって匿名加工

Last updated at Posted at 2021-07-27

PySpark備忘録

実現したいこと

緯度経度に匿名加工を施したい
ただし、匿名加工に関しての手法としては特段難しいことをしているのではなく
最後の3桁ほどを"000"としたい程度
小数点は13位まで

緯度経度の撮りうる値としては以下が考えられる
- 1.2345678910111
- 123.4567891011121
これを上記に従って下3桁を"000"とした場合
- 1.2345678910000
- 123.4567891011000
となって欲しい

考えられるコード

sample.py
"""
Python, Pandasで行う場合のサンプルコード
ただしconvert関数の挙動の確認はしていないのでこんな感じの処理が行いたいんだな程度での認識
"""
import pandas as pd

def convert(longitude_latitude):
    longitude_latitude = str(longitude_latitude)[0: -3] + "000"
    return longitude_latitude

df = pd.read_csv(file_path)
df["longitude"] = df["longitude"].apply(convert)
df["latitude"] = df["latitude"].apply(convert)

試したコード

spark.py
df_result = df_input\
    .select(
        F.concat(F.col("latitude").substr(1, 12), F.lit("000")).alias("latitude"),
        F.concat(F.col("longitude").substr(1, 12), F.lit("000")).alias("longitude")
)

この処理を行うとこのように変換されてしまう
- 1.2345678910111→1.2345678910000
- 123.4567891011121→123.45678910000
つまり桁数が足りない

小数点以下の対応

spark.py
df_result = df_input\
    .select(
        F.concat(F.col("latitude").substr(-13, 10)).alias("after_the_decimal_point_not_anonymized")
    )

こうすることで
- 1.2345678910111→2345678910
- 123.4567891011121→4567891011
が取得できる

実現できるコード

spark.py
df_result = df_input\
    .select(
        F.concat(
            F.split("latitude", "[.]")[0],
            F.lit("."),
            F.concat(F.col("latitude").substr(-13, 10)),
            F.lit("000")
        ).alias("latitude_mask")
)
0
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
0
0