Open Babelはケモインフォマティクスでよく利用されるツールボックスとのことです。
Databricksへのインストールに関しては、こちらを参考にさせていただきました。
クラスターの設定
initスクリプトの作成
最初にOpen Babel本体がクラスターにインストールされるようにする必要があります。このため、Open Babelのインストールを行うinitスクリプトを作成します。
ノートブックで以下のコマンドを実行し、DBFSの/databricks/scripts/taka-openbabel-install.sh
にinitスクリプトを作成します。パス、ファイル名は適宜変更してください。
dbutils.fs.put("/databricks/scripts/taka-openbabel-install.sh","""
#!/bin/bash
apt -y install swig
apt -y install build-essentials cmake python3-dev libeigen3-dev wget
wget https://github.com/openbabel/openbabel/archive/openbabel-3-0-0.tar.gz
tar xf openbabel-3-0-0.tar.gz
cd openbabel-openbabel-3-0-0/
mkdir build; cd $_
# GUIを無効化、スレッド並列化を有効化するオプション
cmake .. -DENABLE_OPENMP=ON -DBUILD_GUI=OFF
# 4並列でコンパイル。並列数は計算機のCPUに合わせて変更してください
make -j4
# インストールの実行
make install
""", True)
クラスターにinitスクリプトを設定します。
- クラスターの詳細画面を開きます。
- 編集をクリックします。
- 高度なオプションを展開します。
- initスクリプトタブをクリックします。
- 送信先をDBFS、initスクリプトのパスに
dbfs:/databricks/scripts/taka-openbabel-install.sh
を指定し、追加をクリックします。
- 以下のようになっていることを確認します。
環境変数の設定
Open BabelをPythonから使用する際には環境変数LD_LIBRARY_PATH
を設定する必要があります。
- クラスターの詳細画面を開きます。
- 編集をクリックします。
- 高度なオプションを展開します。
- Sparkタブをクリックします。
-
環境変数に
LD_LIBRARY_PATH=/usr/local/lib
と入力します。
initスクリプトと環境変数を設定し、クラスターが起動中の場合にはクラスターを再起動します。そうで無い場合には、クラスターを起動します。
Pythonバインディングのインストール
PythonからOpen Babelを呼び出せるようにするために、pipでopenbabel
をインストールします。上の設定を行なったクラスターにノートブックをアタッチして、以下を実行します。クラスターライブラリとしてインストールすることもできます。
%pip install openbabel
ライブラリのインポート
Pythonノートブックで以下のコマンドを実行します。エラーが出なければ無事にインストールできています。
from openbabel import openbabel
以下のコードを実行して動作を確認します。
mol = openbabel.OBMol()
print('Should print 0 (atoms)')
print(mol.NumAtoms())
a = mol.NewAtom()
a.SetAtomicNum(6) # carbon atom
a.SetVector(0.0, 1.0, 2.0) # coordinates
b = mol.NewAtom()
mol.AddBond(1, 2, 1) # atoms indexed from 1
print('Should print 2 (atoms)')
print(mol.NumAtoms())
print('Should print 1 (bond)')
print(mol.NumBonds())
mol.Clear();
コマンドラインツールの実行
マジックコマンド%sh
を使うことで、直接obabel
を呼び出すこともできます。
%sh
obabel -:'CC(=O)Oc1ccccc1C(=O)O' -oascii