ノートブックから Watson Studio プロジェクトおよびプロジェクト資産と対話する必要がある場合は、R 用の project-lib
ライブラリーを使用できます。 このライブラリーは、プロジェクトに対するプログラマチック・インターフェースに似ています。
R 用の project-lib
ライブラリーを使用すると、プロジェクトのメタデータおよび資産 (ファイルや接続など) にアクセスできます。 また、ライブラリーには、プロジェクトに関連付けられたファイルのフェッチを簡素化する関数も含まれています。
注:
project-lib
関数は、ファイルにデータを保存したり、ファイルからデータを取得するときに、データをエンコードまたはデコードしません。project-lib
機能を使用して、接続されているフォルダー資産 ( Cloud Object Storage内のパス上のファイル) にアクセスすることはできません。
ライブラリーの使用
R 用の project-lib
ライブラリーはプリインストールされており、ノートブック・エディターでノートブックに直接インポートできます。 ノートブックでproject-lib
ライブラリーを使用するには、プロジェクトの ID とプロジェクト・トークンが必要です。
プロジェクト・トークンをノートブックに挿入するには、以下のようにします。
ノートブックのツールバーにある「その他」アイコンをクリックして、「プロジェクト・トークンの挿入」をクリックします。
プロジェクト・トークンが存在している場合、以下の情報が含まれたセルがノートブックに追加されます。
library(projectLib) project <- projectLib::Project$new(sc, "<ProjectId>", "<ProjectToken>")
sc
は、Spark コンテキストです (Spark が使用されている場合)。<ProjectId>
はプロジェクトの ID であり、<ProjectToken>
はプロジェクト・トークンの値です。プロジェクト・トークンが存在しないというメッセージが表示された場合は、メッセージ内のリンクをクリックして、プロジェクトの「アクセス制御」ページにリダイレクトします。このページで、プロジェクト・トークンを作成できます。 プロジェクト・トークンを作成する資格がなければなりません。 詳しくは、『プロジェクト・トークンの手動での追加』を参照してください。
プロジェクト・トークンを作成するには、以下のようにします。
- 「管理」タブで、「アクセス制御」ページを選択し、「アクセス・トークン」の下の「新規アクセス・トークン」をクリックします。
- 名前を入力し、プロジェクトの「エディター」ロールを選択し、トークンを作成します。
- ノートブックに戻り、ノートブック・ツールバーの「その他」アイコンをクリックして、「プロジェクト・トークンの挿入」をクリックします。
project-lib
関数
project-lib
ライブラリーのインポート後に作成されるインスタンス化されたプロジェクト・オブジェクトは、以下の仕方でグループ化された関数のセットを公開します。
プロジェクト情報のフェッチ
以下の関数を使用して、プロジェクト関連情報をプログラマチックにフェッチできます。
get_name()
この関数は、プロジェクトの名前を返します。
get_description()
この関数は、プロジェクトの説明を返します。
get_metadata()
この関数はプロジェクト・メタデータを返します。
get_storage_metadata()
この関数は、プロジェクトに関連付けられているオブジェクト・ストレージのメタデータを返します。
get_project_bucket_name()
この関数は、関連付けられたオブジェクト・ストレージ内のプロジェクト・バケット名を返します。 すべてのプロジェクト・ファイルは、このバケットに保管されます。
get_files()
この関数は、プロジェクト内のファイルのリストを返します。 返されるリスト内の各要素には、そのファイルの ID と名前が含まれます。 返されるファイルのリストは、どの基準によってもソートされておらず、関数を再度呼び出すときに変更することができます。
get_assets()
この関数は、すべてのプロジェクト資産のリストを返します。 オプション・パラメーター
assetType
を関数get_assets
に渡すことができます。これにより、タイプによって資産をフィルターに掛けることができます。 このパラメーターに指定できる値は、data_asset
、connection
、およびasset
です。 値asset
は、プロジェクト内のすべての資産を返します。 例えば、データ資産のみを取得するには、関数get_assets("data_asset")
を使用します。get_connections()
この関数は、プロジェクト内にある接続のリストを返します。 返されるリスト内の各要素には、その接続の ID と名前が含まれます。
ファイルのフェッチ
以下の関数を使用して、プロジェクトに関連付けられているオブジェクト・ストレージに保管されているファイルをフェッチできます。
以下の 2 つの方法でファイルをフェッチできます。
get_file_url(filename)
ここで、filename
は、フェッチするファイルの名前です。この関数は、Spark を使用してオブジェクト・ストレージからファイルをフェッチするための URL を返します。 この URL は、プロジェクトに関連付けられているオブジェクト・ストレージのタイプに基づいて作成されます。 プロジェクトのオブジェクト・ストレージと対話すると、Hadoop 構成が自動的にセットアップされます。
以下の例では、この関数を使用して、Spark を使用してオブジェクト・ストレージからデータをフェッチする方法を示します。
# Import the lib library(projectLib) project <- projectLib::Project$new(sc, "<ProjectId>", "<ProjectToken>") # Get the url url <- project$get_file_url("myFile.csv") # Fetch the CSV file from the object storage using Spark invisible(sparkR.session(appName = "SparkSession R")) df.data <- read.df( url, source = "org.apache.spark.sql.execution.datasources.csv.CSVFileFormat", header = "true") head(df.data)
get_file(filename)
ここで、filename
は、フェッチするファイルの名前です。この関数は、実行中のカーネルのメモリーにファイルをフェッチします。 この関数はバイト・バッファーを返します。これは、カーネル固有のデータ構造 (R データ・フレームなど) へのバインドに使用できます。 非常に大容量のファイルの場合、この方法でのファイルのフェッチは推奨されません。
次の例は、ファイルをフェッチして、データを R データ・フレームに読み込む方法を示しています。
# Import project lib library(projectLib) project <- projectLib::Project$new(sc , "<ProjectId>", "<ProjectToken>") # Fetch data my.file <- project$get_file("my_file.csv") # Read the CSV data file into a data frame df.data <- read.csv(text = rawToChar(my.file)) head(df.data)
データの保存
次の関数を使用して、プロジェクトに関連付けられたオブジェクト・ストレージにデータを保存できます。 データは、関連付けられている Cloud Object Storage 内のプロジェクト・バケットにファイルとして追加されます。 この関数は複数のことを行います。 最初にデータをオブジェクト・ストレージに入れた後、このデータをデータ資産としてプロジェクトに追加します。これにより、ファイルとして保存したデータを、プロジェクト内のデータ資産リストで確認できるようになります。
save_data(filename, data, setProjectAsset=TRUE, overwrite=FALSE)
この関数は、以下のパラメーターを取ります。
filename
: 作成されたファイルの名前。data
: アップロードするデータ。 このパラメーターで許容されるタイプは、R ロー・オブジェクトまたはストリング・バッファーです。setProjectAsset[optional]
: データがオブジェクト・ストレージに正常にアップロードされた後に、ファイルをデータ資産としてプロジェクトに追加します。 これはブール値を取り、デフォルトでは値 true に設定されています。overwrite[optional]
: ファイルがオブジェクト・ストレージまたはプロジェクトに既に存在する場合、そのファイルを上書きします。 デフォルトでは、false に設定されています。
以下の例は、データをオブジェクト・ストレージ内のファイルに保存する方法を示しています。
library("projectLib")
project <- access_project()
# Capture CSV data from console output
csv_lines <- capture.output(write.csv(df.data, row.names=FALSE), type="output")
csv_raw <- charToRaw(paste0(csv_lines, collapse='\n'))
project$save_data("file.csv", csv_raw)
接続からのデータの読み取り
次の関数を使用して、任意の接続のメタデータ (資格情報) を取得できます。
get_connection
: この関数は、接続の ID または接続の名前を入力として取ります。 これらの値は、プロジェクトにリストされているすべての資産のid
、name
、およびtype
を返すget_assets()
関数を使用して取得できます。
関数get_connection
は、接続データ・ソースからデータをフェッチするために使用できる接続資格情報を返します。
以下の例は、get_connection
関数を使用して接続の資格情報をフェッチする方法を示しています。
# Import project lib
library(projectLib)
project <- projectLib::Project$new(sc , "<ProjectId>", "<ProjectToken>")
# Fetch connection
conn.cred <- project$get_connection(name="<ConnectionName>")
例えば、dashDB への接続の場合、次のコードを実行してデータをフェッチできます。
library(ibmdbR)
props <- paste("DASHDB;DATABASE=BLUDB;HOSTNAME=", conn.cred$host, ";PORT=50000;PROTOCOL=TCPIP;", sep="")
conn <- idaConnect(props, uid = conn.cred$username, pwd = conn.cred$password, conType = "odbc")
idaInit(conn)
idf.1 <- ida.data.frame('<TableName>')
head(idf.1)
接続データのフェッチ
次の関数を使用して、接続データの資格情報をフェッチできます。 この関数は、接続内の特定のデータを指すdatapath
属性に加えて、接続資格情報を含むディクショナリーを返します。例えば、dashDB インスタンス内の表や Cloudant インスタンス内のデータベースなどです。
get_connected_data
: この関数は、接続されたデータの ID または接続されたデータの名前を入力として使用します。 これらの値は、プロジェクトにリストされているすべての資産のid
、name
、およびtype
を返すget_assets()
関数を使用して取得できます。
以下の例は、get_connected_data
関数を使用して dashDB インスタンス内の接続されたデータの資格情報をフェッチする方法を示しています。
# Import project lib
library(projectLib)
project <- projectLib::Project$new(sc , "<ProjectId>", "<ProjectToken>")
# Fetch credentials of the connected data
conn.data <- project$get_connected_data(id="<ConnectedDataId>")
親トピック: ノートブックでのデータのロードとアクセス