「Perlによる巨大CSVファイルの操作について」の版間の差分

提供: dococo wiki
ナビゲーションに移動 検索に移動
imported>Webmaster
imported>Webmaster
11行目: 11行目:
 
テストベットで試験をしたら1000万行のソート(並び替え)は90分で完了しました。<br />
 
テストベットで試験をしたら1000万行のソート(並び替え)は90分で完了しました。<br />
 
これは'''File::Sortモジュール'''を使用することで巨大CSVファイルの並び替えや操作が可能ということがわかりました。
 
これは'''File::Sortモジュール'''を使用することで巨大CSVファイルの並び替えや操作が可能ということがわかりました。
 +
== 使い方 ==
 +
=== アルファベット順に並び替え ===
 +
OPEN等使わないで、直接ファイルを指定してやれば勝手に該当ファイルをオープンして読み取り、出力ファイルに吐き出す。非常に単純明快な使い方。
 +
<syntaxhighlight lang="perl">
 +
sort_file({
 +
I => "c:\Input.txt", #入力ファイル名
 +
o => "c:\Output.txt", #出力ファイル名(ソート)
 +
});
 +
</syntaxhighlight>
 
----
 
----
 
<!-- カテゴリに追加するページ名を記入 -->
 
<!-- カテゴリに追加するページ名を記入 -->
 
[[Category:Perl|PerlによるきょだいCSVふぁいるのそうさについて]]
 
[[Category:Perl|PerlによるきょだいCSVふぁいるのそうさについて]]

2017年10月25日 (水) 19:44時点における版

仕事上、データベースから出力したCSVファイルを元にデータ整理をする必要に迫られたが。最近はデータ良能肥大によりEXCELでは処理しきれなくなった(要するに100万行を超えた)CSVを扱う必要が出てきたので。Perlによる巨大CSVファイルの操作についていろいろやってみた

巨大CSVファイルの操作

巨大ってどれくらいかというと、大体100万行~1000万行程度のテキストCSVファイルを指しており。操作というのは主にあるキーを元にしてソート(並び替え)や重複ファイルの削除を考えています。
もっと欲を言えば、1000万行や1億行のデータからある条件でピボットテーブル(クロス集計)で中央値を出したり、平均値を出したり。
条件抽出したり、いろいろなことをPerlをつかってできないかと思って四苦八苦しました

File::Sortモジュール

File::Sortはファイルの内容を行単位でソートし,別のファイルへ出力する。機能ですか使ってみると以下の機能があることがわかりました

  • ある区切りを基準にしてソート(並び替え)をして別のファイルへ出力する
  • 複数のファイルをマージして別のファイルへ出力する
  • ある区切りを基準にた重複行を削除して別のファイルへ出力する

テストベットで試験をしたら1000万行のソート(並び替え)は90分で完了しました。
これはFile::Sortモジュールを使用することで巨大CSVファイルの並び替えや操作が可能ということがわかりました。

使い方

アルファベット順に並び替え

OPEN等使わないで、直接ファイルを指定してやれば勝手に該当ファイルをオープンして読み取り、出力ファイルに吐き出す。非常に単純明快な使い方。

	sort_file({
	 I => "c:\Input.txt",	#入力ファイル名
	 o => "c:\Output.txt",	#出力ファイル名(ソート)
	});