なんとな~くしあわせ?の日記

ClojureとかAWSの設定とかをメモする技術ブログ

Apache PigでShift_JISテキストをUTF-8化

Apache PigでShift_JISテキストをUTF-8

hdfs上にファイルを取り込む際、デフォルトの文字コードUTF-8らしい。
どうやって取り込むか悩んだが、UDFという方法を見つけた。

User Defined Function:UDF

ひしだまさんのサイトに載っている通りEvalFuncを継承するクラスを作成し、exec関数を実装する。

Conv2Utf8
  • このソースをmavenを使ってjarファイル化し、「conv2utf8-1.0-SNAPSHOT.jar」とかにしておく
package your.package.name;

import java.io.IOException;
import org.apache.pig.impl.util.WrappedIOException;

import org.apache.pig.EvalFunc;
import org.apache.pig.data.Tuple;
import org.apache.pig.data.TupleFactory;
import org.apache.pig.data.DataType;
import org.apache.pig.data.DataByteArray;

public class Conv2Utf8 extends EvalFunc<String> {

    public String exec(Tuple input) throws IOException {
	if (input == null || input.size() == 0) {
	    return null;
	}
	DataByteArray barray = (DataByteArray) input.get(0);
	byte[] bytes = barray.get();
	return new String(bytes, "MS932");
    }
}
test.pig

REGISTER conv2utf8-1.0-SNAPSHOT.jar

TEMP = LOAD 's3://xxxxx/sample.txt' AS (raw_data:bytearray);
DATA = FOREACH TEMP GENERATE your.package.name.Conv2Utf8(raw_data);

DUMP DATA;

Pigのデータ型

Pig Latin Basics

これを使えばzipファイル等も解凍できるなあと思った

Msys2でSSL certificate problem: unable to get local issuer certificateが出たとき

エラー内容

git cloneしようとして、以下のようなエラー

fatal: unable to access 'https://gitlab-xxxx/yyyy/xxxx.git/': SSL certificate problem: unable to get local issuer certificate

原因

対象のGitサーバが使用している証明書のRoot証明書がmsys2に登録されてない。

対策

.gitconfigをちゃんと設定すればよし

qiita.com

対策の内容
  • 普段はGit(というより、システムの)デフォルトCA証明書を使用してGitサーバにアクセスする
  • 特定のサイトだけ、必要なCA証明書を指定してGitでアクセスするようにする
    • 必要な証明書は複数の場合があります、ブラウザから必要な証明書出してcer形式で出力しcatで結合するとよい

上のサイトに書いてあるように、こんなpemファイル(拡張子は何でもよい)を作る

簡単に言えば,以下のようにSSLサーバ証明書,1つ上の中間CA証明書,さらにその上の中間CA証明書を (テキストとして) 結合し保存して下さい.

-----BEGIN CERTIFICATE-----
SSLサーバ証明書の内容
-----END CERTIFICATE-----

-----BEGIN CERTIFICATE-----
1つ上の中間CA証明書の内容
-----END CERTIFICATE-----

-----BEGIN CERTIFICATE-----
さらにその上の中間CA証明書の内容
-----END CERTIFICATE-----
動作チェック
  • git ls-remote を実行してやればOK
$ git ls-remote https://github.com/Hiroyuki-Nagata/foobar.git
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx        HEAD
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx        refs/heads/master

$ git ls-remote https://gitlab.intra.com/foobar.git
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx        HEAD
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx        refs/heads/master

文系プログラマーがCourseraの機械学習コースを受講中

Qiitaで話題のCourseraの機械学習コースを受講して1ヶ月ぐらいになる。
Machine Learning | Coursera

無手勝流でなんとかWeek3を終わらせた。このままだと遅延しているのだが、頑張って最後までやれば証明書がもらえるらしい。

  • 2017/03/18 Week4終了
  • 2017/04/10 Week5終了
  • 2017/05/02 Week6終了
    • 時間かかり過ぎ…。ダラダラやってたらこのような結果に。
  • 2017/05/05 Week7終了
    • GWのおかげで早く終わった
  • 2017/05/07 Week8終了
    • GWのおかげ
  • 2017/05/26 終了

終わった

nantonaku-shiawase.hatenablog.com

知っておいたほうが良かった知識

総和の記法

Tex

行列

  • 一部行列の簡単な計算がわかっていないと納得できない部分がある
  • ベクトルと行列 ここのサイトの1〜4までを読めばだいたいついていける
    • 特に、2.ベクトルと行列の演算
    • 余談だが、高校数学で→を使う空間的なベクトルへの批判もあって面白い

ベクトルと行列は、共通の要因を持つ一連のデータの集まりにある種の線形演算を定義した線形代数という代数学の仲間であって、幾何学や物理学の仲間ではありません。 ベクトルを矢印に対応させるのは、あくまでも数式の内容を直感的に理解しやすくするためにすぎません。 ただ物理学分野では実在する力にベクトルを対応させ、線形代数を利用して自然現象を記述することが多く、ベクトルの演算定義も物理学に利用しやすいように決められてきました。 このため数学分野でも、ベクトルをあたかも実在するもののごとく矢印で表す風習が残っているのです。

この風習のせいで、我々が最初にベクトルを習う時にもいきなり恐ろしげな矢印を見せられ、

「ベクトルとは大きさと方向を持ったモノである!」

などと教えられてしまいます。 何しろ感受性豊かな青春時代のことですから、不可解な矢印に生理的な恐怖心を抱いてしまい、ベクトル空間というマカ不思議な四次元空間で、オリに囲まれた哀れなスカラー達のまわりを鋭く尖った魔法の矢が飛びかう、などといった悪夢に夜な夜な苛まれることとなるのです。

高校数学が数ⅡBで終わっている自分にとっては、これは大発見なのですよ。

偏微分

線形代数

Week5に行く前にこれを勉強しておけばよかった…
授業内容には線形代数学でのお作法的な部分もでてくる。以下の本はよかった。最初の1章読むだけでもだいぶ価値がある。

プログラミングのための線形代数

プログラミングのための線形代数

線形代数って行列とベクトルだらけの数学なのですよ。初めて知りました。
しかしこれがデータセットニューラルネットワークの構造を計算するのに非常に都合がよい。

副読本

Coursera Machine Learningとは内容の進み方が違う。この本のほうが回り道をしている感じがある。



結論

理系に進めば行列と偏微分はやれたのに…(´・ω・`)

Octaveの人が寄付を求めています!

あと、この機械学習口座で使うOctaveという言語のメンテナーの生活がヤバイそうです。

お金に余裕があって寄付やってやるぜって方は以下からお願いします。