概要
Databricks (Spark) でのデータフレーム作成時に発生するUnsupportedEncodingException: cp932
エラーに対する解決策を紹介します。
FileReadException: Error while reading file file:/Workspace/Repos/share/share/cp932/sample.csv.
Caused by: UnsupportedEncodingException: cp932
このエラーは、ファイルのエンコーディングとしてcp932
がサポートされていないために発生します。Python ではcp932
エンコーディングが使用されるため、誤ってこのエンコーディングを指定してしまうことがあります。この問題を解決するには、encoding パラメータにcp932
の代わりにms932
を指定してください。これにより、エンコーディングの互換性が保たれ、エラーが解消されます。
エラーの発生方法と対応方法
ファイルを準備
Databricks Repos 上で実行することを前提としています。
import os
src_path = f"{os.getcwd()}/sample.csv"
src_data = """
col_1,col_2,col_3
a,b,c
あ,い,う
""".strip()
with open(src_path, "w", encoding='cp932') as file:
file.write(src_data)
エラーの発生方法
schema = """
col1 string,
col2 string,
col3 string,
_corrupt_record string
"""
df = (
spark.read.format("csv")
.schema(schema)
.option("header", True)
.option("encoding", "cp932")
.load(f"file:{src_path}")
)
df.display()
print(df.collect())
FileReadException: Error while reading file file:/Workspace/Repos/share/share/cp932/sample.csv.
Caused by: UnsupportedEncodingException: cp932
エラーの対応方法
schema = """
col1 string,
col2 string,
col3 string,
_corrupt_record string
"""
df = (
spark.read.format("csv")
.schema(schema)
.option("header", True)
.option("encoding", "ms932")
.load(f"file:{src_path}")
)
df.display()
print(df.collect())