検索

クリアフィルター
記事
Megumi Kakechi · 2020年12月13日

%ZSTARTルーチンの内容に不具合がありインスタンスが起動しなくなった場合の対処法

これはInterSystems FAQ サイトの記事です %ZSTARTルーチンを インスタンス開始時に起動しないように構成設定用ファイルを手動で変更します。 【注意】インスタンスの起動環境の変更は、通常管理ポータルで行うものなので、以下に説明する方法は、%ZSTART の SYSTEM ラベルの動作を無効化する方法以外では利用しないようにしてください(別のパラメータを誤って修正してしまった場合、起動できなくなる可能性がありますのでご注意ください)。 1. インスタンス のインストールディレクトリ以下にある構成設定用ファイル(cache.cpf/iris.cpf)をテキストエディタで開きます。 ※構成ファイルは、事前にバックアップ(コピー)していただくことを推奨します。 2. [Startup]セクションにあるSystemStartの値を0に変更し、保存します。 3. ファイル変更後、一旦 インスタンスを通常の方法で停止し、再度開始してください。 SystemStart パラメータの詳細については、下記ドキュメントについてもご参照ください。パラメータ・ファイル・リファレンス_SystemStart【IRIS】
記事
Mihoko Iijima · 2021年4月22日

ユーザ定義エラーを作成する方法のご紹介

これは InterSystems FAQ サイトの記事です。 ユーザ定義エラーとして使用したいエラーコードと対応するメッセージを記述したXMLを用意します。 なお、エラーコードは負の整数で設定してください。 <?xml version="1.0" encoding="UTF-8" ?> <MsgFile Language="ja"> <MsgDomain Domain="UserErrors"> <Message Id="-111" Name="MyError">エラーが発生しました</Message> <Message Id="-222" Name="MyError2">エラーが発生しました2</Message> </MsgDomain> </MsgFile> XML ファイルが作成できたら使用したいネームスペースにロードします。 set x=##class(%MessageDictionary).Import("error.xml") ロード完了後、次のようなコマンドでユーザ定義エラーを取得、表示することができます。 USER>set error=$system.Status.Error(-111) // エラーコード -111 を指定してエラーを作成 USER>write $system.Status.GetErrorText(error) // エラーからエラーメッセージを出力 エラー <UserErrors>-111: エラーが発生しました USER>do $system.Status.DecomposeStatus(error,.val) // エラーの情報を配列変数にセット USER>zwrite val val=1 val(1)="エラー <UserErrors>-111: エラーが発生しました" val(1,"caller")="zError+1^%SYSTEM.Status.1" val(1,"code")=-111 val(1,"dcode")=-111 val(1,"domain")="UserErrors" val(1,"namespace")="TEST" val(1,"param")=0 val(1,"stack")=$lb("e^zError+1^%SYSTEM.Status.1^1","e^^^0")
記事
Hiroshi Sato · 2021年9月23日

レコードマップで何ができるか?

これは InterSystems FAQ サイトの記事です。レコード・マップは、区切り文字付きのレコードや固定幅のレコードを含むファイルをInteroperability機能で使用するメッセージクラスへマッピングしたり、Interoperability機能のメッセージクラスからテキストファイルへマッピングする作業を効率的に行うための機能です。 レコードマップのマッピング定義は管理ポータルで作成でき、CSVファイルを読み込ませながら定義するCSVレコードウィザードも提供しています。 プロダクションでレコードマップを利用する場合は、レコードマップ用ビジネス・サービス、またはビジネス・オペレーションを追加し、作成したレコードマップ定義クラスを指定すれば完成です。 使用例は、以下から取得できます。 レコードマップサンプル レコードマップの詳細な説明は、以下のドキュメントをご参照ください。 レコード・マッパーの使用法について【IRIS】Ensemble レコード・マッパーの使用法について
記事
Hiroshi Sato · 2021年12月28日

コンパイルフラグについて

これは InterSystems FAQ サイトの記事です。 コンパイル時のフラグや修飾子の記号と意味については、以下ドキュメントをご参照ください。 コンパイルフラグについて【IRIS】 コンパイルフラグについて なお、開発環境のスタジオやVisual Studio Codeでは、開発環境の設定画面でフラグを変更できます。 スタジオは、[ツール] > [オプション] > [コンパイラ] > [フラグと最適化] VSCodeは、[View] > [Command Palette...] ターミナルでコンパイルを実行するときは $system.OBJ.CompileAll() などのシステムユーティリティが利用できます。コンパイルフラグを引数に指定しない場合、デフォルトのコンパイルフラグが利用されます。デフォルトのフラグは $system.OBJ.ShowFlags() で確認できます。 USER>do $system.OBJ.ShowFlags() b - Include sub classes. c - Compile. Compile the class definition(s) after loading.   <省略>Default flags for this namespace =dilYou may change the default flags with the SetFlags(flags,system) classmethod. デフォルトのコンパイルフラグを変更するには、$system.OBJ.SetFlags() メソッドを使用します。引数にデフォルトフラグに指定したいフラグを文字列として指定します。戻り値に設定後のフラグが文字列で返ります。 USER>write $system.OBJ.SetFlags("ck")=cdikl
記事
Hiroshi Sato · 2021年9月2日

$ZF(-100)の使用方法

これは InterSystems FAQ サイトの記事です。 $ZF(-100) のコマンドは、以下のフォーマットで使用します。 $ZF(-100, フラグ, コマンド名, コマンドの引数) OSコマンドを実行する場合は、「/shell」フラグが必要です。例えば mkdir であれば、次のように使用します。 // mkdir C:\temp\newdir Write $ZF(-100, "/shell", "mkdir", "C:\temp\newdir") コマンドの引数が複数ある場合は、以下の例のように引数の数だけ二重引用符で括ってカンマ区切りで指定します。 // move C:\temp\a.txt C:\temp\a2.txt Write $ZF(-100, "/shell", "move", "C:\temp\a.txt", "C:\temp\a2.txt") // net use Z: \\filesrv\public /user:user password Write $ZF(-100, "/shell", "net", "use", "Z:", "\\filesrv\public", "/user:user", "password") また、同期・非同期実行は以下のように使用します。 // call BATPATH バッチファイルを呼び出します set BATPATH="C:\temp\test.bat" set status = $ZF(-100, "/shell", "call", BATPATH) // 同期 set status = $ZF(-100, "/shell /async", "call", BATPATH) // 非同期 詳細は以下のドキュメントをご覧ください。$ZF(-100) の使用方法について【IRIS】 $ZF(-100) の使用方法について 尚、$ZF(-100) コマンドが使用可能なバージョンは、January 2018 SV の脆弱性に対応している以下のバージョンになります(2019年1月現在)。 * Caché / Ensemble * 2013.1.7.974.6 2014.1.5.851.3 2015.1.4.803.6 2015.2.5.953.3 2016.1.4.104.2 2016.2.3.903.4 2017.1.3.317.0 2017.2.1.801.3 2017.2.2.865.0  2018.1以降の全てのバージョン
記事
Hiroshi Sato · 2021年8月30日

【IRIS】サーバーを移行する際にコピーが必要な設定情報

これは InterSystems FAQ サイトの記事です。 何らかの理由でサーバー移行が必要になった際に、移行前の環境から移行後の環境に設定情報をコピーすることで設定作業を軽減できます。 以下の設定情報を移行できます。 iris.cpf SQLゲートウェイ設定 Webゲートウェイ設定 *注1 IRISSYSデータベースに保存しているユーザー作成ルーチンなど *注2 セキュリティ設定 タスク設定 注1 パスワードを設定している場合には、パスワードのみ手動で再設定が必要です。注2 ^%ZSTART, ^ZMIRRORルーチンなど 優先接続サーバー設定に関しても、物理的には移行可能ですが、Windowsのレジストリー情報をコピーする必要があります。 レジストリー情報をコピーして他システムに移行する方法は通常推奨される方法ではありません。 各設定のエクスポート/インポート方法は、添付ファイルの内容をご確認ください。 また、現在は英語ドキュメントのみの公開となっておりますが、以下のドキュメントもあわせてご覧ください。 Server Migration Guide
記事
Megumi Kakechi · 2021年8月26日

クラス定義のコンパイルで、「エラー #5368:クラス名 のオブジェクトが、1プロセスでインスタンス化されています。」のエラーが出ます

これは InterSystems FAQ サイトの記事です。 こちらは、コンパイル時に既にそのクラスのインスタンスを開いている場合に起こるエラーです。 対処方としては以下の2つの方法があります。 インスタンスを開いているプロセスまたはアプリケーションを終了する スタジオのビルドメニュのコンパイルオプション:コンパイルフラグ “使用中のクラスをコンパイル” をチェックしコンパイルを行う インスタンス化しているプロセスを特定したい場合は、以下のサンプルルーチンをお試しください。 /// Test.mac search(classname) public { Set pid="" Set pid=$order(^$Job(pid)) While pid'="" { Do checkVars(pid,classname) Set pid=$Order(^$Job(pid)) } } checkVars(pid,string) { Set $ztrap="err" Set var="" For { Set var=$zu(88,1,pid,var) q:var="" Set val=$zu(88,2,pid,var) If val[string { Write !,pid,":",var," = ",val,! } } Quit err Set $ztrap="" Quit } こちらのサンプルルーチンは、ユーザプロセスのローカル変数を検索して指定したクラスを使用しているか確認します。 ≪実行例≫ USER>do search^Test("Test.Person") 2352:p1 = 1@Test.Person6324:p2 = 2@Test.Person ※この場合は、Pid=2352 と Pid=6324 のプロセスが Test.Person を使用しています。
お知らせ
Mihoko Iijima · 2022年5月22日

【アーカイブ配信のお知らせ】オープンソースだけで IRIS on Kubernetes を動かそう(2022年3月9日開催)

開発者のみなさん、こんにちは! 2022年3月9日開催「InterSystems Japan Virtual Summit 2022」のセッション「オープンソースだけで IRIS on Kubernetes を動かそう」のアーカイブを YouTube に公開いたしました。 (プレイリストはこちら) Docker は使いこなせるようになってきたけど、Kubernetes はなかなか手を出すチャンスがないな、という方々を対象に手持ちの Windows/PC 上に K8s 環境を構築して色々試すことを最終目標としたセッションです。 開発者コミュニティの記事「microk8sでKubernetesをお手軽に試す」との紙面連動です。 ぜひご参照ください。 【目次】 01:43 Kubernetes について 参考動画:KubernetesでのIRISの運用とそれを支える仕組み 05:48 Microk8S 利用の動機付け 09:50 デモ 記事:microk8sでKubernetesをお手軽に試す の内容に沿ってデモを動かしています。 14:00 デモ - IRIS起動の確認 15:35 デモ - MicroK8S 環境をクラスタ構成にする 17:32 デモ - Longhorn をデプロイする 19:28 デモ - Longhorn を Persistent Volume としてIRISが使用するように構成する 20:58 デモ - ノード障害発生時の動作を確認 23:15 まとめ ↓参考となるオンラインラーニング(英語)↓ https://learning.intersystems.com/course/view.php?name=KubernetesExercise
記事
Hiroshi Sato · 2022年8月8日

TCP アダプタの StayConnected の設定に関する注意点

これは InterSystems FAQ サイトの記事です。 TCP アダプタを使用するビジネスホストの [接続中を維持(StayConnected)]と[プールサイズ(PoolSize)]のデフォルト設定値は以下の通りです。 StayConnected = -1(常時接続タイムアウト無し)PoolSize = 1 ネットワークの問題でビジネスホストへの接続が切断された場合に、プロダクション側では切断されたことを検知できないため新しい接続を受け付けません。 またこの状況の時、イベントログにも記録されません。 StayConnected が デフォルト値(-1)の場合、接続がタイムアウトしないため新しい接続を受け付けるためには、ビジネスホストを再起動する必要があります。 このような状況を回避するためには、StayConnected を 0 以上の値に設定することを推奨します。 例えば300(秒)に設定した場合、TCP ビジネスホストは 300 秒以上新たなメッセージを受信しなかった場合に、自動的に接続を切断して再接続できます。 処理量の多いシステムの場合には、通常 StayConnected の値をさらに小さな値、例えば 5(秒)に設定します。
お知らせ
Seisuke Nakahashi · 2020年8月21日

IRIS 2020.1 日本語ドキュメント公開

日本語ドキュメント公開 このたび、InterSystems IRIS 2020.1 の日本語ドキュメントが完成しました。それぞれ以下のWEBサイトで公開をしています。 IRIS 2020.1 IRIS for Health 2020.1 Health Connect 2020.1 ページ内の「すべてのドキュメント」アイコンをクリックすることで、各技術コンテンツを参照いただけます。 キューブから日本語ドキュメントを参照する IRIS for Windows では、以下の設定を行うことで、キューブの[ドキュメント]をクリックしたときに、上記の日本語ドキュメントページを表示させることが可能となります。 <IRIS installdir>\httpd\conf\httpd-doc.conf をエディタで開き、Redirect先のURL(右側)を、日本語ドキュメントのもに書き換える。 具体的には、URLの最後 docbook を docbookj に変更する IRISを再起動する たとえば、IRIS 2020.1 の場合、以下のように httpd-doc.conf を編集することで、 キューブの[ドキュメント]をクリックすると、日本語ドキュメントページが表示されるようになります。 ぜひ日本語ドキュメントをご活用いただき、IRIS製品をお使いくださいませ!
記事
Tomoko Furuzono · 2025年3月25日

ORDER BY で並べ替える際の照合順を調整する

これは、InterSystems FAQサイトの記事です。 SQLでクエリ実行時、ORDER BYで並べ替えをする場合、各RDBMSによって、照合順が異なることがあります。 たとえば、NULLと空文字の混じった文字列のカラムを並べ替える場合、 IRIS SQLでは、既定の照合順は下記のようになりますが、 NULL, 空文字, 0, 00, 01, 1, 10, 100, 11, A, a, B, b Oracleでは、下記のような照合順になります。 空文字, 0, 00, 01, 1, 10, 100, 11, A, B, a, b, NULL 複数のDB由来のデータを取り扱う際には、このような照合順の違いを合わせたい場合があります。 IRISの場合、既定の文字列照合はSQLUPPERですが、照合タイプを変更することによって、照合順を変えることが出来ます。ドキュメント:照合 上記のIRIS SQLとOracleの違いを合わせるためには、照合タイプを「SQLSTRING」に設定し、インデックスを作成します。 Property TestColumn As %String(COLLATION = "SQLSTRING"); Index IdxTest On TestColumn; 但し、Nullについてはこの方法では対応できないため、Nullの照合順を合わせたい場合には、ORDER BY句を下記のようにします。 ORDER BY IFNULL(TestColumn, 1, 0), TestColumn
記事
Tomoko Furuzono · 2025年4月7日

全角/半角混在文字列から指定された幅の文字列を取得する方法

これはInterSystems FAQサイトの記事です。 指定した文字列式のうち指定したフィールド幅(半角での文字数)に収まる文字数を取得する関数:$ZPOSITIONと、部分文字列を返す関数:$EXTRACTを組み合わせることによって、全角/半角混在文字列から、指定された幅の文字列を取得することが出来ます。※$Extractは文字単位で処理を行いますので、全角/半角を区別した取り扱いはできません。 構文: $ZPOSITION(<文字列式>, <フィールド幅>, <全角文字に使用するピッチ値(デフォルトは2)>) $EXTRACT(<文字列>, <開始位置>, <終了位置>) 例: //指定した文字列(str)のうち、全角=2/半角=1 の幅として、フィールド幅10(半角10文字分)に含まれる文字数を取得 USER>set str="あい1234うえお" USER>write $ZPOSITION(str,10,2) 7 //指定した文字列(str)のうち、全角=2/半角=1 の幅として、フィールド幅10(半角10文字分)に含まれる文字列を取得 USER>write $extract(str,1,$zposition(str,10,2)) あい1234う $ZPOSITION、$EXTRACTの詳細については、下記各ドキュメントページをご確認ください。 ドキュメント:$ZPOSITION(ObjectScript) ドキュメント:$EXTRACT(ObjectScript)
お知らせ
Toshihiko Minamoto · 2022年2月9日

製品リリースサイクルの変更

インターシステムズは、2018年からInterSystems IRISで2ストリームのリリースサイクルを採用しています(開始時のお知らせをご覧ください)。 Continuous delivery (CD) リリース —このリリースは、新機能を迅速に提供し、継続的に更新され、新機能を直ちに利用するアプリケーションの開発、およびデプロイに最適です。 Extended maintenance (EM) リリース — このリリースは、CDリリースよりも頻度は低いですが、メンテナンス・リリースの安定性を提供します。新機能をいち早く利用することよりも、メンテナンスリリースでの修正が容易であることが重要な大規模エンタープライズアプリケーションに最適です。 このアプローチについては非常に好意的なフィードバックをいただいており、人々は「鈍行列車(slow train)」と「快速列車(fast train)」という言葉を使うようになりました。 EMリリースは、大規模なオンプレミスの顧客基盤をs持つお客様やパートナーに好まれる「鈍行列車」です。 CDリリースは、最新かつ最高の機能を求めるお客様やパートナーに好まれる「快速列車」です。 他の多くのソフトウェアベンダーは、この2つのアプローチを採用しており、通常、「鈍行列車」をLTS(Long Term Support)と呼んでいます。 インターシステムズのサポートに対するアプローチは、非常に顧客中心であり、お客様がどのリリースを使用しているかに関わらず、サポートを行います。 そのため、当社ではEM(Extended Maintenance)という用語を使用しています。 当社のリリースサイクルは、当社の成長とともに進化してきました。 当初、EMのリリースはキット形式で、CDのリリースはコンテナ形式でした。 2020年には、コンテナの普及に伴い、EMリリースにキットとコンテナの両方を含めるようになりました。 その結果、EMのリリースは毎年「.1」、CDのリリースは「.2」、「.3」などとなっています。 今回の2021.2のリリースでは、その流れをもう少し進化させました。 CDリリースは、コンテナだけでなく、キット形式でも提供されるようになりました。 InterSystems IRISとInterSystems IRIS for Healthに加えて、HealthShare Health Connectをこれらのリリース・トレインに追加しました これは、お客様からの要望によるものです。 70%以上の開発者がInterSystems IRISをコンテナで使用しているにもかかわらず、MacOSやWindows上で直接開発している開発者は、快速列車へのアクセスを望んでいました。 CDリリースでのプロダクション展開も一般的になってきていますが、プロダクションでコンテナを使って実行することにあまり慣れていない顧客もいます。 Health Connectのお客様は、頻繁に出る新機能へのアクセスを望んでいました。 CDリリースの制限 CDリリースをキット形式で提供するようになったとはいえ、EMリリースとは異なります。 CDリリースは「快速列車」であり、お客様が迅速かつ容易に最新かつ最高のものに移行することを目的としています。 CDリリースにはいくつかの制限があります。 CDリリースには、メンテナンスアップデートやSVアップデートはありません。 CDリリースには、アドホック機能はありません。その代わり、次のCDリリースに移行すると、そのリリースにはすべての不具合修正とセキュリティアップデートが含まれます。 Caché または Ensemble から CD リリースへのインプレースコンバージョンはサポートされていません。 代わりに、最新の EM リリースに移行できます。当社の前世代製品であるCachéやEnsembleでアプリケーションを構築されたお客様やパートナーの皆様には、慣れ親しんだリズムに合っている「鈍行列車」をご利用いただくのがベストです。 CDリリースからのアップグレードは以下の方法に限定されています。 次のCDリリース(例:2020.2→2020.3) 次のメジャーEMリリースまたはその年のメンテナンスバージョン (2020.2→2021.1, 2020.3→2022.1, 2020.3->2021.1.1) これらの制限は新しいものではありませんが、過去にCDリリースを使用していたお客様は単にコンテナを交換していただけでした。お客様が他のものを必要とする状況に遭遇しなかっただけです。Virtual Summit 2020でインターシステムズ社の製品ライフサイクルについてのセッションを行いましたが、2ストリームアプローチはうまく機能しており、CDリリースの制限は自然なことだというフィードバックを受けました。 今回、キット形式のCDリリースを導入したことで、CDリリースとEMリリースの仕組みを皆さんに思い出していただきたいと思います。 2021.2のキット版をお使いの方は、2022.1へのアップグレードを期待してください。 そこからは、"快速列車 "に乗り続けることも、"鈍行列車 "に乗り換えることも、余計な手間をかけずにできるでしょう。
記事
Megumi Kakechi · 2022年12月1日

複数インスタンスでライセンスを共有する場合に必要な設定

これは InterSystems FAQ サイトの記事です。 複数インスタンスでライセンスを共有する場合、ライセンスを統合管理するライセンスサーバの設定が必要です。 1. ライセンスサーバの構成 1) ライセンスキーの配置 ライセンスキー(IRIS.key/cache.key)は、すべての インスタンスの <インストールディレクトリ>/mgr に配置してください。 ただし、IRIS 2021.1 以降のバージョンをお使いの場合は KeyDirectory を指定することで全てのインスタンスへのライセンスキーの配置は必要なくなります。 KeyDirectory を指定して各インスタンスにライセンスキーをロードする場合、LicenseID の設定が必要になります。各インスタンスの開始時にローカルの iris.key ファイルが検出されない場合、LicenseID を使用してライセンスサーバにライセンスキーを要求します。LicenseID は、管理ポータルの以下のメニューで設定します。 管理ポータル: [システム管理] > [構成] > [追加設定] > [開始]:LicenseID 2) ライセンスサーバの設定 ライセンスサーバの設定は、全ての構成で同一のライセンスサーバを使用するように定義します(全ての構成で設定します)。ライセンスサーバは、管理ポータルの以下のメニューで設定します。 管理ポータル: [システム管理] > [ライセンス] > [ライセンスサーバ] 既定のLOCAL を更新、または削除(+新規作成)して登録します。 【注意】リモート・ライセンス・サーバがファイアウォールで保護されている場合、UDP トラフィックのためにライセンス・サーバ・ポートが開かれている必要があります。 設定項目詳細については、ドキュメントをご参照ください。ライセンスサーバの構成について【IRIS】ライセンスサーバの構成について 3) 全ての構成の再起動 ライセンスキーの配布と、ライセンスサーバの設定が完了したら、一旦全ての構成を停止します。その後、ライセンスサーバを設定した構成から開始し、正しいライセンスサーバに接続していることを確認した後で、ライセンスサーバ以外の構成を開始します。 確認には、%SYSTEM.License クラスの ShowServer()メソッドを使用します。実行例は以下の通りです。 USER>do $system.License.ShowServer() アクティブなライセンス・サーバアドレス = XXX.XXX.XXX.XXX ポート = XXXX このほかにも、ライセンス・サーバが管理しているライセンスの使用状況を確認するためのユーティリティが、%SYSTEM.License クラスにあります。 詳細はクラスリファレンスか、以下ドキュメントをご参照ください。ライセンス使用状況を確認するユーティリティについて【IRIS】ライセンス使用状況を確認するユーティリティについて また、ライセンスサーバのフェールオーバを行う目的で、複数のライセンスサーバを設定することもできます。 詳細は、添付資料をご参照ください。 2. ライセンスの監視 ライセンスサーバの設定を行ったインスタンスのうち、任意の1つインスタンスで以下のコマンドを発行します。 USER>do $system.License.DumpKeys() License server Client data (1 key[s]) dumped to: c:\intersystems\iris\mgr\dumpkeys.txt at XXX 出力ファイル dumpservers.txt はライセンスサーバが稼働するインスタンスの mgr ディレクトリに生成されます。 内容は以下のようになります(ライセンスサーバが稼働するインスタンスで確認してください)。 USER>!type c:\intersystems\iris\mgr\dumpkeys.txt 例: Dump of clients using the following key: LicenseCapacity=InterSystems IRIS 2022.1, Enterprise:... CustomerName=XXX OrderNumber=XXX ExpirationDate=XXX AuthorizationKey=XXX MachineID= LicenseID= : Client LU Connections Server Instance 192.29.xx.xxx 1 2 127.0.0.1 IRIS 192.29.xx.xxx 1 5 192.29.xx.xxx IRIS Total connections = 7, License units consumed = 2 USER> 3. ライセンスの更新 IRIS 2021.1 以降のバージョンで各インスタンスのライセンスキーを更新する場合、ライセンスサーバの KeyDirectory 内のキーファイルを置き換えて有効化したあと、ReloadKeys^%SYS.LICENSE を実行します。 %SYS>d ReloadKeys^%SYS.LICENSE 1 key file(s) uploaded to license server. 各インスタンスのライセンスモニタ (^LMFMON) が、構成されている LicenseID に対して異なるキーがあるかどうかを 30 分おきに確認し、ある場合はアップグレードを実行しようとします。アップグレードされると、message.log には以下のように記録され、ライセンスが更新されます。 11/21/22-14:46:18:721 (12928) 0 [Utility.Event] LMF Info: New license key for ID ***** downloaded and activated.11/21/22-14:46:24:745 (12928) 0 [Utility.Event] LMF Info: Connected to license server 172.18.101.2,4002 【注意】場合よっては、インスタンスの再起動が必要な時があります。その場合、ライセンスモニタは以下のようなログを記録します。再起動を行うことで、新しいラインセンスキーがロードされます。 11/21/22-13:40:30:002 (10448) 0 [Utility.Event] ライセンスアップグレードエラー:Conversion from Core Capacity to Concurrent User インスタンスの再起動が必要です。11/21/22-13:40:30:004 (10448) 1 [Utility.Event] LMF Warning: New license key for ID ***** downloaded but could not activate. 【関連】ライセンスサーバでライセンスを一元管理する方法
記事
Minoru Horita · 2020年6月26日

アイリスデータセットのK平均クラスタリング

アイリスデータセットのK平均クラスタリング みなさん、こんにちは。 今回はアイリスデータセットでk平均アルゴリズムを使用します。 注意:Ubuntu 18.04、Apache Zeppelin 0.8.0、python 3.6.5で以下を実行しました。 概要 K平均法は、クラスタリングの問題を解決する最も単純な教師なし学習アルゴリズムの1つです。 このアルゴリズムは、同じグループ内のオブジェクト(グループはクラスターです)が他のグループ内のオブジェクトよりも(意味的に)互いに類似するようにすべてのオブジェクトをグループ化します。 例えば、緑の芝生に赤いボールのある画像があるとします。 K平均法はすべてのピクセルを2つのクラスターに分割します。 1番目のクラスターにはボールのピクセルが含まれ、2番目のクラスターには芝生のピクセルが含まれます。 アイリスデータセットは、3種のアイリスの花の特徴をいくつか含むテーブルです。 種には「Iris-setosa」、「Iris-versicolor」、「Iris-virginica」があります。 それぞれの花には5つの特徴(花びらの長さ、花びらの幅、がく片の長さ、がく片の幅、種 )があります。 要件の確認 まず、すべての要件を確認しましょう。 次のように、ターミナルに「which python3」貼り付けてください。 Python 3がインストールされている場合は、最初のパスが表示されます。 空の場合(「which python42」の出力のように表示される場合)、ターミナルに以下を貼り付けてください。 sudo apt-get update sudo apt-get -y upgrade sudo apt install python3 sudo apt-get install -y python3-pip 次に、pysparkをインストールします。 pip3 install pyspark Spark インタープリターの設定で、zeppelin.pyspark.python を「which python3」で出力されたパスに変更してください。 最後にSparkインタープリターで新しいメモを作成し、以下を新しい段落に貼り付けて実行してください。 %pyspark import sys print(sys.version) 何も問題なければ、Pythonのバージョンが表示されます。 クラスタリング InterSystems IRISをセットアップし、ZeppelinおよびSparkと連携できるようにします。 例えば、 以前のInterSystems IRIS、Apache Zeppelin、Apache Spark接続に関する記事を参照してください。 まず、次のようにアイリスデータセットをロードします。 Speciesの内容を確認するには、以下を新しい段落に貼り付けて実行してください。 %pyspark dataFrame.select("Species").show(150) 先に進む前に、データの内容を検討することをお勧めします。 新しい段落を追加し、以下を貼り付けて実行してください。 %pyspark z.show(dataFrame) 以下のように、テーブルには5つの特徴であるPetalLength(花びらの長さ)、PetalWidth(花びらの幅)、SepalLength(がく片の長さ)、SepalWidth(がく片の幅)、Species(種)があります。 Scatter Chart(散布図)を選択してください。 ここでは、以下の画像でクラスターを確認できます(4次元ベクトルのため、完全な画像は確認できません)。 別の視点からクラスターを確認する場合は、xAxisおよびyAxisパラメータを変更してください。 そして、私たちの目的は特徴を使用して花の種類を予測することです。 新しい段落を追加し、そこに以下を貼り付けて実行してください。 %pyspark from pyspark.ml.linalg import Vectors from pyspark.ml.feature import VectorAssembler assembler = VectorAssembler(inputCols = ["PetalLength", "PetalWidth", "SepalLength", "SepalWidth"], outputCol="features") // inputColsで指定された4つのパラメータをでベクトルを作成し、outputColで名前を指定しています。 irisFeatures = assembler.transform(dataFrame) // これはベクトルを含む outputCol 列をテーブルに追加します。 irisFeatures.show(5) 次に、以下を新しい段落に貼り付けて実行します。 %pyspark from pyspark.ml.clustering import KMeans (trainingData, testData) = irisFeatures.randomSplit([0.7, 0.3]) // データをランダムに2つの部分に分割します ]kmeans = KMeans().setK(3).setSeed(101010) // 3つのクラスターを持つK平均モデルです。setSeedは再現可能な結果を作成します。 model = kmeans.fit(trainingData) // KMeansモデルをトレーニングします。 transformed = model.transform(trainingData) // 予測結果を含む新しい列をテーブルに追加します。 transformed.show(150) 次のように、testDataでモデルを使用します。 %pyspark predictions = model.transform(testData) predictions.show(151) そして、モデルの精度を計算します。 %pyspark SpeciesAndPreds = predictions.select("Species", "prediction").collect() def getCluster(specie):     if specie == "Iris-setosa":         return 0     elif specie == "Iris-versicolor":         return 1     else:         return 2 def getAccuracy(flowers):     counter = 0;     for flower in flowers:         if getCluster(flower[0]) == flower[1]:             counter += 1     return counter / len(flowers) accuracy = getAccuracy(SpeciesAndPreds) print("accuracy is " + str(accuracy)) // 私の結果は0.9090909090909091です 各クラスターにある花の数を確認するには、「z.show(predictions)」を使用してBar Chart(棒グラフ)を選択します。 まとめ ここでは、InterSystems IRISでアイリスの花の種をかなり正確に予測するモデルを作成しました(0.9超の精度)。 また、「Iris-setosa」は分離可能であり、「Iris-virginica」と「Iris-versicolor」はK平均アルゴリズムでは分離できないことが分かりました。 そのため、精度を高めるためには別の方法を使用することをお勧めします。 リンク Apache Spark + Apache Zeppelin + InterSystems IRISを起動する方法 Spark SQL、データフレームおよびデータセットガイド 機械学習ライブラリガイド K平均法 クラスタリング(ただし、このAPIはRDD用であるため、アルゴリズムに関する関連情報を参照するだけにしてください) アイリス花データセット