0
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?

Sparkにおけるファイルエンコーディングの検知

Posted at

SparkのデフォルトエンコーディングはUTF-8です。これ以外のエンコーディングのファイルをそのまま読み込むと文字化けします。

PySparkでCSVを読み込む際には、オプションencodingを指定します。

こちらでも、エンコーディングの指定に関する記事が書かれています。

自分でも試してみます。ボリュームにそれぞれのエンコーディングでファイルを保存します。

Screenshot 2024-11-19 at 16.34.56.png

file_to_read = "/Volumes/users/takaaki_yayoi/encoding/utf8.csv"

# 検出された文字セットでファイルをSpark DataFrameに読み込む
df = spark.read.option("header", True).csv(file_to_read)

# DataFrameを表示
display(df)

UTF-8は問題なく読み込めます。

Screenshot 2024-11-19 at 16.36.19.png

file_to_read = "/Volumes/users/takaaki_yayoi/encoding/euc.csv"

df = spark.read.option("header", True).csv(file_to_read)

# DataFrameを表示
display(df)

EUCは文字化けします。

Screenshot 2024-11-19 at 16.36.55.png

エンコーディングEUC-JPを指定します。

file_to_read = "/Volumes/users/takaaki_yayoi/encoding/euc.csv"

df = spark.read.option("header", True).option("encoding", "EUC-JP").csv(file_to_read)

# DataFrameを表示
display(df)

文字化けが解消されました。

Screenshot 2024-11-19 at 16.38.04.png

毎回指定するのも大変なので、chardetを使った検知の機構を組み込みます。

import chardet

file_to_read = "/Volumes/users/takaaki_yayoi/encoding/euc.csv"

# 文字セットを検出
with open(file_to_read, "rb") as f:
    rawdata = f.read()
    result = chardet.detect(rawdata)
    charset = result['encoding']

# 検出された文字セットでファイルをSpark DataFrameに読み込む
df = spark.read.option("encoding", charset).option("header", True).csv(file_to_read)

# DataFrameを表示
display(df)

エンコーディングが検知され、それを用いてCSVファイルが読み込まれまるようになりました。

Screenshot 2024-11-19 at 16.40.13.png

はじめてのDatabricks

はじめてのDatabricks

Databricks無料トライアル

Databricks無料トライアル

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?