CSVファイルを読み込む時に
外部や違うシステムから送られてきたCSVファイルをSparkやDatabricksで読み込む際、いくつかの方法があるが、最も便利だと思う方法がUSING CSV。pysparkでspark.read.csvするのと同じようにエンコーディングやクオートの指定などが細かくできる。
例えば以下のようなファイル
エンコーディングはutf-8
だけど、クオートの中に改行が混ざっていたりすると、手間がかかる。なんとか一発でテーブルにしたい。
"aaa","あああ",","
"bbb","いいい","
"
"ccc","ううう"," "
手順
-
ファイルをhdfsやdbfsに置く
ファイルをアップロードしたり、ストレージをマウントしたりして、Sparkのクラスタからアクセスできる状態に。 -
CREATE TABLEでテーブルを作る
この時に、USING CSV
句をつかって、OPTIONS
に設定を追加する。この例では、エンコーディング、クオート、マルチライン(クオート内が複数行であっても一つのカラムとして読み込む)を設定している。
CREATE TABLE test_quotation (
col1 STRING,
col2 STRING,
col3 STRING
)
USING CSV
OPTIONS (
'encoding'='utf-8', --エンコーディングをutf-8に設定。sjisも可。
'quote'='"', --クオートとして"を設定
'multiLine'='True' --マルチラインを有効に
)
LOCATION '/mnt/test/utf-8' --ここには先ほどファイルを置いた場所を指定
確認
SELECT文を実行するとLOCATION
で設定したディレクトリのファイルに対して、OPTIONS
で設定した内容にしたがって、ファイアが読み込まれてテーブルに。
SELECT * FROM test_quotation
参考
- CREATE TABLE文の文法について。
PARTITION
などの設定も併用可能。
-
USING CSV
で設定可能なOPTIONS
はこちらに。ヘッダーの扱いなども可能。