注: 以下の翻訳の正確性は検証されていません。AIPを利用して英語版の原文から機械的に翻訳されたものです。

Copied!
1 2 3 4 5 6 7 # foundry.transformsからDatasetをインポートします from foundry.transforms import Dataset # "kittens"という名前のデータセットを取得し、arrow形式でテーブルを読み込み、pandasのデータフレームに変換します kittens = Dataset.get("kittens")\ .read_table(format="arrow")\ .to_pandas()
Copied!
1 2 # "kittens"という名前のデータセットを読み込む kittens <- datasets.read_table("kittens")

上記の構文はデータセットをロードし、自動的にデータをRのデータフレームに収集します。

データがワークスペースのメモリ容量を超える場合、次の構文を使用して、行または列の一部のサブセットだけをロードするために、プッシュダウンフィルター処理するを適用できます:

Copied!
1 2 3 4 5 library(dplyr) # .Rprofileにデフォルトでインポートされるべき kittens_df <- Dataset.get("kittens") %>% # (オプション)収集する前に他の変換を適用 collect()

非タブラー型データセット

以下のスニペットは、データセットエイリアスが puppies の非タブラー型データセット Dogs に対して生成されます。コードスニペットの中で Dogs は一切参照されていません。これは、データセットをコピーして登録 を選択した後に、Code Workspaces が暗黙的にユーザーの選択した名前の下にそれを登録するからです。これはタブラー型データセットとは異なり、データフレーム内に値を挿入する代わりに、データセットのファイルへのアクセスを puppies_files 変数で提供します。

Jupyter® で:

Copied!
1 2 3 4 5 6 7 8 # foundry.transformsからDatasetをインポート from foundry.transforms import Dataset # "puppies"という名前のデータセットを取得 puppies = Dataset.get("puppies") # データセット内のファイルをダウンロード puppies_files = puppies.files().download()

RStudio® で:

Copied!
1 2 3 4 # "puppies"という名前のデータセットからファイルをリスト化します。 puppies_files <- datasets.list_files("puppies") # リスト化したファイルをローカルにダウンロードします。 puppies_local_files <- datasets.download_files("puppies", puppies_files)

セキュリティ

Code Workspaces では、データセットに適用されたデータセキュリティマーキングが尊重されます。さらに、ワークスペースは、すべてのロードされたデータセットのマーキングを継承します。これは、コードワークスペースへのアクセスを持つためには、ユーザーはワークスペースに含まれるすべてのデータセットとその他の入力に必要な権限も持っていなければならないことを意味します。ワークスペースの単一の入力へのアクセスを失うと、ワークスペース全体へのアクセスを失います。

データセットのサイズ制限

Foundry の他のツールとは異なり、Code Workspaces はデフォルトで Spark 上で実行されません。Code Workspaces は、非常に大きなデータセットを扱うためではなく、素早い探索的分析のために設計されています。メモリや CPU の制限に関連する問題を防ぐために、データセットをロードする前にフィルター処理するを使用してデータセットのサイズを削減することを検討してください。

データセットファイルのフィルター処理

Code Workspaces では、任意のデータセットをバックアップするファイルをダウンロードすることができます。これらは表形式(つまり、スキーマがある)であるか、非表形式であるかです。名前で、またはファイルメタデータ(パス、バイト数、トランザクション RID、更新時間)にフィルター処理のロジックを適用して、ダウンロードするファイルのサブセットを選択することが可能です。

Jupyter® では:

Copied!
1 2 3 4 5 6 7 8 9 10 11 12 13 from foundry.transforms import Dataset # データセット内のすべてのファイルをダウンロードする downloaded_files = Dataset.get("my_alias").files().download() local_file = downloaded_files["file.pdf"] # 単一のファイルをダウンロードする local_file = Dataset.get("my_alias").files().get("file.pdf").download() # データセット内の1MB未満のすべてのPDFファイルをダウンロードする downloaded_files = my_dataset.files()\ .filter(lambda f: f.path.endswith(".pdf") and f.size_bytes < 1024 * 1024) .download()

複数のファイルをダウンロードする際には、個々のファイルを名前でダウンロードするのではなく、並列ダウンロードを活用するためにフィルター処理する構文を使用することを推奨します。

RStudio®では:

Copied!
1 2 3 4 5 6 7 8 9 10 11 12 # データセット内の全てのファイルをダウンロードします all_files <- datasets.list_files("my_alias") downloaded_files <- datasets.download_files("my_alias", all_files) local_file <- downloaded_files$`file.pdf` # 名前でファイルをダウンロードします downloaded_files <- datasets.download_files("my_alias", c("file1.pdf", "file2.pdf")) # データセット内の全てのPDFファイルを1MB未満でダウンロードします all_files <- datasets.list_files("my_alias") pdf_files <- all_files[sapply(all_files, function(f) f.endswith(".pdf") && f$sizeBytes < 1024*1024)] downloaded_files <- datasets.download_files("my_alias", pdf_files)
Copied!
1 2 3 4 5 6 7 8 # foundry.transformsからDatasetをインポートします from foundry.transforms import Dataset # "dogs"という名前のデータセットを取得し、その最初の1000行を抽出しています # そして、そのデータをpandasのデータフレーム形式で読み込みます dogs_subset = Dataset.get("dogs")\ .limit(1000)\ .read_table(format="pandas")
Copied!
1 2 3 4 5 library(dplyr) # .Rprofileでデフォルトでインポートされるべき dogs_subset <- Dataset.get("dogs") %>% head(1000) %>% # 最初の1000行を取得 collect() # データをローカルに収集
Copied!
1 2 3 4 5 6 7 8 9 10 11 12 from foundry.transforms import Dataset, Column # "breed" と "age" カラムのみをロードする columns_to_load = ["breed", "age"] breed_and_age_only = Dataset.get("dogs")\ .select(*columns_to_load)\ .read_table(format="pandas") # "weight" と "color" カラムのみをロードする weight_and_color_only = Dataset.get("dogs")\ .select("weight", "color")\ .read_table(format="pandas")
Copied!
1 2 3 4 5 6 library(dplyr) # dplyr ライブラリを読み込む。デフォルトで .Rprofile にインポートされるべきです。 # "weight" と "color" の列のみを読み込む weight_and_color_only <- Dataset.get("dogs") %>% select(weight, color) %>% collect()
Copied!
1 2 3 4 5 6 from foundry.transforms import Dataset, Column # 色が"Brown"の犬だけをロードします brown_dogs = Dataset.get("dogs")\ .where(Column.get("color") == "Brown")\ .read_table(format="pandas")
Copied!
1 2 3 4 5 # 色が"Brown"で、品種が"Labrador"の犬だけをロードします golden_dogs = Dataset.get("dogs")\ .where(Column.get("color") == "Brown")\ .where(Column.get("breed") == "Labrador")\ .read_table(format="pandas")

以下に、Jupyter® Code Workspacesでサポートされている行のフィルター処理するための構文の一部を示します:

Copied!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 # 特定の値と等しい行のみ保持する .where(Column.get("column_name") == value) # 特定の値と等しくない行のみ保持する .where(Column.get("column_name") != value) # ~ 演算子を使用した不等号 .where(~Column.get("column_name") == value) # 別の値と比較可能な値を持つ行のみ保持する .where(Column.get("column_name") > value) .where(Column.get("column_name") >= value) .where(Column.get("column_name") < value) .where(Column.get("column_name") <= value) # OR / AND 演算子 .where((Column.get("column_name") == value1) | (Column.get("column_name") == value2)) .where((Column.get("column_name1") == value1) & (Column.get("column_name2") == value2)) # 値が null でない行のみ保持する .where(~Column.get("column_name").isnull()) # 値が特定のリストの一部である行のみ保持する .where(Column.get("column_name").isin([value1, value2, value3])) # 二つの与えられた境界の間にある日付の行のみ保持する .where(Column.get("date_column_name").between('lower_bound_incl', 'upper_bound_incl')) # 最初の N 行のみ保持する, ここで N は数値です. これは他のフィルターを適用する前に行われます .limit(N) # 列のサブセットを選択する .select("column_name1", "column_name2", "column_name3")

RStudio®における行フィルター処理の構文

以下の構文を使用して、RStudio®でデータセットを行レベルでフィルター処理することができます。

Rstudioのフィルター処理は、dplyrライブラリーを使用して実装され、標準的なメソッドfilterselect、およびheadを実装します。これらのフィルター処理はプッシュダウンされ、つまり、データがワークスペースのメモリーに読み込まれる前に適用されます。

以下の構文を使用して、dogsデータセットから茶色の犬のみを読み込むことができます:

Copied!
1 2 3 4 5 6 library(dplyr) # .Rprofileでデフォルトでインポートされるべきです # 色が"Brown"の犬だけをロードする brown_dogs <- Dataset.get("dogs") %>% foundry::filter(color == "Brown") %>% collect()

ワークスペースにロードする前に foundry::filter を使ってデータセットを事前にフィルター処理するのに注目してください。技術的には、foundry:: プレフィックスは必須ではありませんが、ユーザーの環境の他のパッケージからの同名の filter 関数との潜在的な競合を避けるために使用することを推奨します。これらの filter 文は、dplyr ライブラリからの %>% 演算子を使用して一度にいくつかの条件を適用するためにチェーンできます。このライブラリは、ユーザーの RStudio ワークスペースの .Rprofile ファイルでデフォルトでインポートする必要があります。

Copied!
1 2 3 4 5 6 7 library(dplyr) # .Rprofile にデフォルトでインポートされるべきです # 色が"Brown"で品種が"Labrador"の犬だけをロードします brown_labradors <- Dataset.get("dogs") %>% foundry::filter(color == "Brown") %>% # 色が"Brown"のものだけをフィルタリング foundry::filter(breed == "Labrador") %>% # 品種が"Labrador"のものだけをフィルタリング collect() # データを収集

以下では、RStudio® Code Workspaces でサポートされている行フィルター処理する構文のさらなる例を見つけることができます。列名は、引用符で囲まずに foundry::filter 関数に渡す必要があります。

Copied!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 # 特定の値と等しい行のみ保持する foundry::filter(column_name == "string_value") %>% foundry::filter(integer_column_name == 4) %>% # 特定の値と等しくない行のみ保持する foundry::filter(column_name != value) %>% # ! 演算子を使用した不等式 foundry::filter(!(column_name == value)) %>% # 他の値と比較可能な値を持つ行のみを保持する foundry::filter(column_name > value) %>% foundry::filter(column_name >= value) %>% foundry::filter(column_name < value) %>% foundry::filter(column_name <= value) %>% # OR / AND 演算子 foundry::filter(column_name == value1 | column_name == value2) %>% foundry::filter(column_name == value1 & column_name == value2) %>% # 与えられたリストの一部である値を持つ行のみを保持する foundry::filter(column_name %in% c("value1", "value2")) %>% # 値が null でない行のみを保持する foundry::filter(!is.na(column_name)) %>% # 値が与えられた2つの包括的な範囲内にある行のみを保持する foundry::filter(between(age, 2, 4)) %>% # 列のサブセットを選択する select(column_name1, column_name2) %>% # セットされている場合、`filter`節で使用されるすべての列を含める必要があります # 最初のN行のみを保持する、ここでNは数値です。これは他のフィルターの前に適用されます head(N) %>%

さらに、group_byのような高度なデータトランスフォームを行うために、一時的にデータをArrowテーブルとして集めることもできます:

Copied!
1 2 3 4 5 6 7 8 9 library(dplyr) # .Rprofileでデフォルトでインポートされるべき grouped_dogs <- Dataset.get("alias") %>% # 単純なフィルタは押し下げることができます foundry::filter(age > 2) %>% collect(as_data_frame = FALSE) %>% # 一時的にデータをArrowテーブルとして収集します # 高度な変換は、arrowテーブルに適用する必要があります group_by(breed) %>% collect()
Copied!
1 2 3 4 5 6 7 8 9 library(dplyr) # .Rprofileでデフォルトでインポートされるべきです # 色が"Brown"で、体重が62以上の犬だけをロード # "name"、"breed"、"color"の列だけをロード heavy_brown_dogs <- Dataset.get("dogs") %>% foundry::filter(weight > 62) %>% # 体重が62以上の犬をフィルタリング foundry::filter(color == "Brown") %>% # 色が"Brown"の犬をフィルタリング select("name", "breed", "color") %>% # "name"、"breed"、"color"の列を選択 collect() # 結果を取得
Copied!
1 2 3 4 5 6 7 # タブラー(表形式)スニペット # df_variableというデータフレームを"output_dataset_tabular"という名前で保存します datasets.write_table(df_variable, "output_dataset_tabular") # 非タブラー(非表形式)スニペット # path_to_file_variableで指定したパスのファイルを"output_dataset_non_tabular"という名前でアップロードします datasets.upload_files(path_to_file_variable, "output_dataset_non_tabular")