apache pysparkでUnicodeEncodeError: ‘ascii’ codec can’t encode characterとか出たら

localeの設定が間違っていると思われます。 pysparkの実行環境で import locale print(locale.getpreferredencoding()) を表示してみましょう。ANSIとか出てきたら駄目です。ここがUTF-8でないといけません。 sparkの実行サーバーで locale と打ってみて、LANGがja_JP.UTF-8になっていればこの問題は解決できます。 とりあえずconf/spark-env.shに export LANG=ja_JP.UTF-8 と打ってsparkを再起動して解決しました

python-basic

ディレクトリを再帰的に検索 import os for root,dirs,files in os.walk(path): for file in files:  

arffとpandasのDataFrameを双方向変換できるライブラリarff2pandasをPyPIで公開しました

機械学習ツールWekaを使っていると、しばしば.arffのファイルフォーマットとpandasのDataFrameを行き来したくなります。 そこで普段はarff2pandasというパッケージを作って使っていたのですがせっかくなのでPyPIに公開してpipでインストールできるようにしました。 インストール pip install arff2pandas つかいかた # インポート from arff2pandas import a2p # 読み込み with open(‘sample.arff’) as f: df = a2p.load(f) print(df) # 書き込み import pandas as pd df = pd.DataFrame({ ‘power@NUMERIC’:[0.5,0.2], ‘label@{good,bad}’:[‘good’,’bad’] }) with open(‘sample.arff’,’w’) as f: a2p.dump(df,f) なるべくjsonファイル入出力のスタイルに近づけているつもりです。 pandasがCSVにできるのでarffとcsvの行き来も簡単 with open(‘sample.arff’) as f: a2p.load(f).to_csv(‘sample.csv’) PyPIのURLはこちらです https://pypi.python.org/pypi?:action=display&name=arff2pandas ソースコードはGitHubで公開しています。 https://github.com/garicchi/arff2pandas

neo4jをpythonから利用してGraphDBで遊ぶ

graphdbをpythonから遊びます。 利用するグラフDBはneo4jで、操作するクライアントはpythonのneo4jrestclientパッケージを利用しました。 OSはArchlLinuxでやっていますが他の環境でもまあ同じだと思います。 インストール archのAURにあったのでyaourtからインストールします。 yaourt -S neo4j-community パッケージマネージャからインストールできない場合、公式サイトからtar.gzで圧縮されたバイナリをダウンロードします。 ポート設定をいじります。 dbms,connector.http.addressはデフォルトでは0.0.0.0となっていますがリモートサーバーで動かしているならそのIPをいれましょう。 ポート番号はデフォルトの7474でいいと思いますが場合によってはポートが既にバインドされていると言われるので変更する必要がある場合は変更しましょう。 sudo nano /etc/neo4j/neo4j.conf # dbms.connector.bolt.addressのところと # dbms.connector.http.addressのところをプライベートアドレスに書き換える 再起動 sudo systemctl restart neo4j これでhttp://{server ip}:7474にアクセスしてneo4jのポータルが表示されればOKです。 パスワードを設定しましょう。 pythonからデータをいれる neo4jrestclientをインストールします。 pip install neo4jrestclient 以下のコードでデータを入れます。 # グラフDBに接続 url = ‘http://{server ip}:7474/db/data’ gdb = GraphDatabase(url, username=’neo4j’, password='{password}’) # ノード1を作成 from_node = gdb.nodes.create(name=’ノード1′) from_node.labels.add(‘Data’) # ノード2を作成 to_node = gdb.nodes.create(name=’ノード2′)…

pandasでよく使うけど忘れやすい処理のメモ

特定の列削除 del df[‘column_name’] 行のイテレーション for key,row in df.iterrows(): 列条件に一致する行の抽出 df_n = df[df[‘column_name’]==’val’] 平均をとって平均からの差分を取得 mean = df.mean() df = df – mean 特定の列の条件によって変化する新しい列の生成 df[‘new_column_name’] = df[‘column_name’].apply(lambda x: ‘good’ if x>=0 else ‘bad’)