iMind Developers Blog

iMind開発者ブログ

python

Pythonのsubprocessで標準出力を取得

概要 Pythonで外部コマンドを呼んで標準出力を文字列で取得する。 バージョン情報 Python 3.6.8 事前準備 標準出力と標準エラーに出力する下記のようなコード(out.py)を用意しておく。 import sys print('standard out') print('standard error', file=sys…

Airflowのdags内でairflow.cfgの値を参照する

概要 $AIRFLOW_HOME/airflow.cfgファイルに記述した内容をPythonのコードから取りたかった。 バージョン情報 Python 3.6.7 apache-airflow==1.10.1 settingsを参照する AIRFLOW_HOMEやDAGS_FOLDERの値はairflow.settingsに入っている。 import airflow # air…

Airflowでpythonのコードをspark-submit

概要 AirflowのSparkSubmitOperatorを使ってPySparkのスクリプトファイルをspark-submitで実行する。 バージョン情報 Python 3.6.7 apache-airflow==1.10.1 spark 2.3.1 PySpark側のコード 適当にHDFS上のファイルを読み込んで行数をcountするコードを書いて…

PySparkで行に連番を振る

概要 PySParkで行に0〜nまでの連続する数値を採番したかった。 バージョン情報 spark-2.3.1 Python 3.5.5 サンプルデータ 下記のような2つのカラムを持つCSVファイル(100万行)を利用。 $ gunzip -c foo.csv.gz | head -5 0,0.194617 1,0.184299 2,0.988041…

PySparkからJavaのクラスを呼び出してHdfsのファイル操作

概要 PySparkでHDFS上のファイルをちょろっと操作したい時の為に、JavaのクラスをPySparkから呼び出してlsしたりwriteしたりrmするサンプルコードをまとめておく。 バージョン情報 spark-2.3.1 Hadoop 2.6.0 Python 3.5.5 FileSystemの取得 まずは必要なJava…

PySparkでWikipediaのXMLをパースしてword2vec

概要 PySparkを利用して日本語版Wikipediaの全文を取り込んでわかち書きし、word2vecに放り込んでみる。 XMLのパース、わかち書き、word2vec等の全行程をPySpark上で行う。 バージョン情報 spark-2.3.1 Python 3.5.5 Janome==0.3.6 Janomeの動く環境を用意 S…

Pythonのmultiprocessingの進捗をtqdmで取りたい

概要 Pythonのmultiprocessing.Poolで並列処理をする際にtqdmで進捗を表示する方法の確認。 バージョン情報 Python 3.7.1 tqdm==4.29.1 導入 pip install tqdm サンプルコード Pool.imap、もしくはimap_unorderedを使えば進捗が出る。 import time, random f…

Pythonでファイルの行数を取るコード

概要 Pythonでファイルの行数を取るコードをシンプルな記述で書きたかった。 各コードに実行時間を記載しているが、これは1億行のファイル(520MB)をカウントした場合の数字。 バージョン情報 Python 3.7.1 単純にループしながらinclement 何も考えずに書く…

Pythonでparquetの読み書き

概要 parquetの読み書きをする用事があったので、PyArrowで実行してみる。 PyArrowの類似のライブラリとしてfastparquetがありこちらの方がpandasとシームレスで若干書きやすい気がするけど、PySparkユーザーなので気分的にPyArrowを選択。 バージョン情報 P…

PySparkで独自モジュールを呼び出す

概要 PySparkでローカルの任意のモジュールをクラスタ上で動かしたい場合の指定について確認する。 バージョン情報 spark-2.3.1 Python 3.5.5 ディレクトリ構成 今回利用するディレクトリの構成は下記のような想定。myというディレクトリに独自モジュールが…

PySparkでXMLファイルの読み書き

概要 WikipediaのXMLファイルをSpark上で読み込んでみたかったので、SparkでのXMLの読み書きについて学習する。 バージョン情報 spark-2.3.1 Python 3.5.5 サンプルデータ 最初からWikipediaのデータを扱うのは怖いので(bzip2で固めて2.6GB)、まずは小さな…

PySparkで任意のライブラリを気軽に入れたい

概要 PySpark上で任意のPythonライブラリを動かしたい。しかし管理者ではないのでカジュアルにpipで何かを入れたりはできない。 そんな時、Clouderaの下記記事によるとconda createで生成した環境を配布して実行すれば管理者以外でも好きな環境でPythonを動…

Pythonのlocals()の利用

概要 Pythonの組み込み関数locals()についてのメモ書き。 バージョン情報 Python 3.6.5 locals()の挙動 Update and return a dictionary representing the current local symbol table. Free variables are returned by locals() when it is called in funct…

PythonのlxmlでXMLを扱う

概要 lxmlはlibxml2とlibxsltのPythonバインディング。XMLの生成、パース、XPath等、一般的な操作が一通りできる。 今回はXMLのパース、編集、保存等の基本的な処理を触ってみる。 バージョン情報 Python 3.6.5 lxml==4.2.4 サンプルデータ valuesタグの配下…

Pythonのretryingによるリトライ

概要 Pythonでは下記のように簡易なアノテーションで処理失敗時にリトライを行うことができるライブラリがいくつか存在する。 @retry() def something(): ''' retry until succeed''' これらのライブラリの1つであるretryingを使ってみる。 バージョン情報 P…

Pythonでの画像の連結

概要 複数の画像を連結して1枚にして返す用事があったので、NumpyやOpenCVを利用して動作を確認した。だいたいNumPyで愚直に実行。Pillowは利用していない。 バージョン情報 Python 3.6.5 opencv-python==3.4.2.17 サンプル画像 かわいいワンコが仲睦まじく…

OpenCVのSobel, CannyでのEdge Dtection

概要 OpenCVを使ってedge detection(輪郭検出)を行う。有名ドコロのSobel operatorとCanny edge detectorを利用。 導入及び環境 インストールはcondaにて実行。 $ conda install -c conda-forge opencv バージョン情報。 $ python --version Python 3.6.5 …

PythonのJanomeを用いた形態素解析

概要 Janomeは導入が手軽なピュアPython形態素解析ライブラリ。わざわざmecabやjuman++を導入する手順踏むほどでもないような軽い解析処理を行うシーンで使うと便利。 個人的にはPySpark上でわかち書きをする時に利用しています。 バージョン情報 Python 3.6…

PythonでJuman++を動かす

概要 形態素解析のJunam++について、インストールからPythonでの形態素解析の実行までを行う。 バージョン情報 jumanpp-1.0.2 pyknp==0.4.1 OSはUbuntu系を想定。それ以外のOSを利用している方はaptのところを適宜読み替えてください。 Juman++について Juma…