サポートされる各カーネルは、ノートブック内のデータセットから Platform データを読み取るための組み込み機能を備えてます。現在、Adobe Experience Platform Data Science Workspace の JupyterLab は Python、R、PySpark、Scala のノートブックをサポートしています。 ただし、ページ番号付けデータのサポートは、Python と R ノートブックに限られます。 このガイドでは、JupyterLab ノートブックを使用してデータにアクセスする方法に焦点を当てています。
このガイドを読む前に、JupyterLab ユーザーガイド を参照し、JupyterLab の概要と Data Science Workspace 内での役割について確認してください。
PySpark と Scala のノートブックの場合、「Remote RPC client disassociated」という理由でエラーが発生しています。 これは、通常、ドライバーまたは実行者のメモリが不足していることを意味します。 "batch"モード に切り替えて、このエラーを解決してください。
次の情報は、読み取り可能な最大データ量、使用されたデータのタイプ、およびデータを読み取る推定時間枠を定義します。
Python と R では、40 GB の RAM で構成されたノートブックサーバがベンチマークに使用されました。 PySpark と Scala の場合、64GB の RAM、8 コア、2 DBU で構成され、最大 4 人のワーカーを持つデータベースクラスタが以下のベンチマークに使用されました。
使用される ExperienceEvent スキーマデータのサイズは、1,000 行から 10 億行 (1B) までの範囲で様々です。 PySpark と Spark 指標の場合、XDM データには 10 日間の日付範囲が使用されていました。
アドホックスキーマデータは、Query Service Create Table as Select (CTAS) を使用して事前に処理されています。 このデータは、1,000 行 (1K) から 10 億行 (1B) までのサイズも異なります。
PySpark と Scala のノートブックでデータセットを読み取る場合、インタラクティブモードまたはバッチモードを使用してデータセットを読み取ることができます。 インタラクティブは高速な結果を得るために作成されるのに対して、バッチモードは大規模なデータセット用です。
XDM ExperienceEvent スキーマ: XDM データの最大 200 万行(ディスク上の約 6.1 GB のデータ)を 22 分以内に読み取ることができます。行を追加すると、エラーが発生する場合があります。
行数 | 1K | 1 万 | 100,000 | 1M | 2M |
---|---|---|---|---|---|
ディスク上のサイズ (MB) | 18.73 | 187.5 | 308 | 3000 | 6050 |
SDK(秒) | 20.3 | 86.8 | 63 | 659 | 1315 |
アドホックスキーマ: 非 XDM(アドホック)データの最大 500 万行(ディスク上の約 5.6 GB のデータ)を 14 分以内に読み取ることができます。行を追加すると、エラーが発生する場合があります。
行数 | 1K | 1 万 | 100,000 | 1M | 2M | 3M | 5M |
---|---|---|---|---|---|---|---|
ディスクのサイズ(MB 単位) | 1.21 | 11.72 | 115 | 1120 | 2250 | 3380 | 5630 |
SDK(秒) | 7.27 | 9.04 | 27.3 | 180 | 346 | 487 | 819 |
XDM ExperienceEvent スキーマ: 13 分未満で、最大 100 万行の XDM データ(ディスク上の 3 GB データ)を読み取ることができます。
行数 | 1K | 1 万 | 100,000 | 1M |
---|---|---|---|---|
ディスク上のサイズ (MB) | 18.73 | 187.5 | 308 | 3000 |
R カーネル(秒単位) | 14.03 | 69.6 | 86.8 | 775 |
アドホックスキーマ: アドホックデータの最大 300 万行(ディスク上のデータは 293 MB)を約 10 分で読み取れるはずです。
行数 | 1K | 1 万 | 100,000 | 1M | 2M | 3M |
---|---|---|---|---|---|---|
ディスクのサイズ(MB 単位) | 0.082 | 0.612 | 9.0 | 91 | 188 | 293 |
R SDK(秒) | 7.7 | 4.58 | 35.9 | 233 | 470.5 | 603 |
XDM ExperienceEvent スキーマ: インタラクティブモードでは、XDM データの最大 500 万行(ディスク上の約 13.42 GB のデータ)を約 20 分で読み取ることができます。インタラクティブモードでは、最大 500 万行までサポートされます。 大きなデータセットを読み取る場合は、バッチモードに切り替えることをお勧めします。 バッチモードでは、約 14 時間で XDM データの最大 5 億行(ディスク上の最大 1.31 TB のデータ)を読み取れるはずです。
行数 | 1K | 1 万 | 100,000 | 1M | 2M | 3M | 5M | 10M | 50M | 100M | 500M |
---|---|---|---|---|---|---|---|---|---|---|---|
ディスク上のサイズ | 2.93 MB | 4.38MB | 29.02 | 2.69 GB | 5.39 GB | 8.09 GB | 13.42 GB | 26.82 GB | 134.24 GB | 268.39 GB | 1.31 TB |
SDK(インタラクティブモード) | 33 秒 | 32.4s | 55.1s | 253.5s | 489.2s | 729.6s | 1206.8s | - | - | - | - |
SDK(バッチモード) | 815.8s | 492.8s | 379.1s | 637.4s | 624.5s | 869.2s | 1104.1s | 1786s | 5387.2s | 10624.6s | 50547s |
アドホックスキーマ: インタラクティブモードでは、XDM 以外のデータの最大 500 万行(ディスク上の約 5.36 GB のデータ)を 3 分以内に読み取ることができます。バッチモードでは、XDM 以外のデータの最大 10 億行(ディスク上の最大 1.05 TB のデータ)を約 18 分で読み取ることができます。
行数 | 1K | 1 万 | 100,000 | 1M | 2M | 3M | 5M | 10M | 50M | 100M | 500M | 1B |
---|---|---|---|---|---|---|---|---|---|---|---|---|
ディスク上のサイズ | 1.12 MB | 11.24 MB | 109.48MB | 2.69 GB | 2.14 GB | 3.21 GB | 5.36 GB | 10.71 GB | 53.58 GB | 107.52 GB | 535.88 GB | 1.05 TB |
SDK インタラクティブモード(秒) | 28.2s | 18.6s | 20.8s | 20.9s | 23.8s | 21.7s | 24.7s | - | - | - | - | - |
SDK バッチモード(秒) | 428.8s | 578.8s | 641.4s | 538.5s | 630.9s | 467.3s | 411s | 675s | 702 秒 | 719.2s | 1022.1s | 1122.3s |
XDM ExperienceEvent スキーマ: インタラクティブモードでは、XDM データの最大 500 万行(ディスク上の約 13.42 GB のデータ)を約 18 分で読み取ることができます。インタラクティブモードでは、最大 500 万行までサポートされます。 大きなデータセットを読み取る場合は、バッチモードに切り替えることをお勧めします。 バッチモードでは、約 14 時間で XDM データの最大 5 億行(ディスク上の最大 1.31 TB のデータ)を読み取れるはずです。
行数 | 1K | 1 万 | 100,000 | 1M | 2M | 3M | 5M | 10M | 50M | 100M | 500M |
---|---|---|---|---|---|---|---|---|---|---|---|
ディスク上のサイズ | 2.93 MB | 4.38MB | 29.02 | 2.69 GB | 5.39 GB | 8.09 GB | 13.42 GB | 26.82 GB | 134.24 GB | 268.39 GB | 1.31 TB |
SDK インタラクティブモード(秒) | 37.9s | 22.7s | 45.6s | 231.7s | 444.7s | 660.6s | 1100 年代 | - | - | - | - |
SDK バッチモード(秒) | 374.4s | 398.5s | 527s | 487.9s | 588.9s | 829s | 939.1s | 1441s | 5473.2s | 10118.8 | 49207.6 |
アドホックスキーマ: インタラクティブモードでは、XDM 以外のデータの最大 500 万行(ディスク上の約 5.36 GB のデータ)を 3 分以内に読み取ることができます。バッチモードでは、XDM 以外のデータの最大 10 億行(ディスク上のデータは約 1.05 TB)を約 16 分で読み取ることができます。
行数 | 1K | 1 万 | 100,000 | 1M | 2M | 3M | 5M | 10M | 50M | 100M | 500M | 1B |
---|---|---|---|---|---|---|---|---|---|---|---|---|
ディスク上のサイズ | 1.12 MB | 11.24 MB | 109.48MB | 2.69 GB | 2.14 GB | 3.21 GB | 5.36 GB | 10.71 GB | 53.58 GB | 107.52 GB | 535.88 GB | 1.05 TB |
SDK インタラクティブモード(秒) | 35.7s | 31 秒 | 19.5s | 25.3s | 23 秒 | 33.2s | 25.5s | - | - | - | - | - |
SDK バッチモード(秒) | 448.8s | 459.7s | 519 秒 | 475.8s | 599.9s | 347.6s | 407.8s | 397s | 518.8s | 487.9s | 760.2s | 975.4s |
Python ノートブックを使用すると、データセットにアクセスする際にデータをページ番号付けできます。ページ番号付けの有無に関わらずデータを読み取るコード例を以下に示します。利用可能なスターター Python ノートブックの詳細については、JupyterLab ユーザーガイド内の JupyterLab Launcher の節を参照してください。
以下の Python ドキュメントでは、次の概念の概要を説明しています。
ページ番号なし:
次のコードを実行すると、データセット全体が読み取られます。実行が成功した場合、データは df
変数で参照される Pandas データフレームとして保存されます。
# Python
from platform_sdk.dataset_reader import DatasetReader
dataset_reader = DatasetReader(get_platform_sdk_client_context(), dataset_id="{DATASET_ID}")
df = dataset_reader.read()
df.head()
ページ番号付き:
次のコードを実行すると、指定したデータセットからデータが読み取られます。ページ番号付けは、limit()
関数を使用してデータを制限し、offset()
関数を使用してデータをオフセットすることで実現します。データの制限とは、読み取るデータポイントの最大数を指し、オフセットとは、データの読み取り前にスキップするデータポイントの数を指します。読み取り操作が正常に実行された場合、データは df
変数が参照する Pandas データフレームとして保存されます。
# Python
from platform_sdk.dataset_reader import DatasetReader
dataset_reader = DatasetReader(get_platform_sdk_client_context(), dataset_id="{DATASET_ID}")
df = dataset_reader.limit(100).offset(10).read()
JupyterLab ノートブックのデータセットに書き込むには、JupyterLab の左側のナビゲーションで「データアイコン」タブ(下でハイライト表示)を選択します。 Datasets ディレクトリと Schemas ディレクトリが表示されます。 「データセット」を選択して右クリックし、使用するデータセットのドロップダウンメニューから「ノートブックにデータを書き込む」オプションを選択します。 ノートブックの下部に実行可能コードエントリが表示されます。
または、次のコードセルをコピーして貼り付けることもできます。 {DATASET_ID}
と {PANDA_DATAFRAME}
の両方を置き換えます。
from platform_sdk.models import Dataset
from platform_sdk.dataset_writer import DatasetWriter
dataset = Dataset(get_platform_sdk_client_context()).get_by_id(dataset_id="{DATASET_ID}")
dataset_writer = DatasetWriter(get_platform_sdk_client_context(), dataset)
write_tracker = dataset_writer.write({PANDA_DATAFRAME}, file_format='json')
JupyterLabPlatformPython で を使用すると、 ノートブックで SQL を使用して、Adobe Experience Platform クエリサービスを通じてデータにアクセスできます。Query Service を通じたデータへのアクセスは、実行時間が優れているので、大規模なデータセットを扱う場合に便利です。 Query Service を使用したデータのクエリには、処理時間の制限は 10 分です。
JupyterLab で Query Service を使用する前に、Query Service SQL 構文 に関する十分な知識があることを確認してください。
Query Service を使用してデータをクエリする場合は、ターゲットデータセットの名前を指定する必要があります。 必要なコードセルを生成するには、データエクスプローラーを使用して目的のデータセットを見つけます。データセットの一覧を右クリックし、「ノートブック内のデータのクエリ」をクリックして、ノートブックに 2 つのコードセルを生成します。 これら 2 つのセルの詳細を以下に示します。
JupyterLab で Query Service を利用するには、まず作業中の Python ノートブックと Query Service の間に接続を作成する必要があります。 これは、最初に生成されたセルを実行することで達成できます。
qs_connect()
2 番目に生成されたセルでは、最初の行を SQL クエリの前に定義する必要があります。デフォルトでは、生成されたセルは、クエリ結果を Pandas データフレームとして保存するオプションの変数(df0
)を定義します。
引数 -c QS_CONNECTION
は必須で、カーネルに対して SQL クエリを実行するように指示しま Query Serviceす。その他の引数のリストは、付録を参照してください。
%%read_sql df0 -c QS_CONNECTION
SELECT *
FROM name_of_the_dataset
LIMIT 10
/* Querying table "name_of_the_dataset" (datasetId: {DATASET_ID})*/
Python 変数は、次の例に示すように、文字列形式の構文を使用して中括弧({}
)で囲むことで、SQL クエリ内で直接参照できます。
table_name = 'name_of_the_dataset'
table_columns = ','.join(['col_1','col_2','col_3'])
%%read_sql demo -c QS_CONNECTION
SELECT {table_columns}
FROM {table_name}
Python ノートブックの ExperienceEvent データセットにアクセスしてフィルタリングするには、データセットの ID({DATASET_ID}
) と、論理演算子を使用して特定の時間範囲を定義するフィルタールールを指定する必要があります。 時間範囲を定義すると、指定されたページ番号は無視され、データセット全体が考慮されます。
フィルタリング操作のリストを以下に示します。
eq()
:と等しいgt()
:より大きいge()
:より大きいか等しいlt()
:より小さいle()
:より小さいか等しいAnd()
:論理積演算子Or()
:論理和演算子次のセルでは、ExperienceEvent データセットを、2019 年 1 月 1 日から 2019 年 12 月 31 日の終わりまでの間にのみ存在するデータにフィルタリングします。
# Python
from platform_sdk.dataset_reader import DatasetReader
dataset_reader = DatasetReader(get_platform_sdk_client_context(), dataset_id="{DATASET_ID}")
df = dataset_reader.\
where(dataset_reader["timestamp"].gt("2019-01-01 00:00:00").\
And(dataset_reader["timestamp"].lt("2019-12-31 23:59:59"))\
).read()
R ノートブックを使用すると、データセットにアクセスする際にデータをページ番号付けできます。 ページ番号付けの有無に関わらずデータを読み取るコード例を以下に示します。使用可能なスターター R ノートブックの詳細については、JupyterLab ユーザーガイド内の JupyterLab Launcher の節を参照してください。
以下の R ドキュメントでは、次の概念の概要を説明します。
ページ番号なし:
次のコードを実行すると、データセット全体が読み取られます。実行が成功した場合、データは df0
変数で参照される Pandas データフレームとして保存されます。
# R
library(reticulate)
use_python("/usr/local/bin/ipython")
psdk <- import("platform_sdk")
datetime <- import("datetime", convert = FALSE)
py_run_file("~/.ipython/profile_default/startup/platform_sdk_context.py")
DatasetReader <- psdk$dataset_reader$DatasetReader
dataset_reader <- DatasetReader(py$get_platform_sdk_client_context(), dataset_id="{DATASET_ID}")
df0 <- dataset_reader$read()
head(df0)
ページ番号付き:
次のコードを実行すると、指定したデータセットからデータが読み取られます。ページ番号付けは、limit()
関数を使用してデータを制限し、offset()
関数を使用してデータをオフセットすることで実現します。データの制限とは、読み取るデータポイントの最大数を指し、オフセットとは、データの読み取り前にスキップするデータポイントの数を指します。読み取り操作が正常に実行された場合、データは df0
変数が参照する Pandas データフレームとして保存されます。
# R
library(reticulate)
use_python("/usr/local/bin/ipython")
psdk <- import("platform_sdk")
datetime <- import("datetime", convert = FALSE)
py_run_file("~/.ipython/profile_default/startup/platform_sdk_context.py")
DatasetReader <- psdk$dataset_reader$DatasetReader
dataset_reader <- DatasetReader(py$get_platform_sdk_client_context(), dataset_id="{DATASET_ID}")
df0 <- dataset_reader$limit(100L)$offset(10L)$read()
JupyterLab ノートブックのデータセットに書き込むには、JupyterLab の左側のナビゲーションで「データアイコン」タブ(下でハイライト表示)を選択します。 Datasets ディレクトリと Schemas ディレクトリが表示されます。 「データセット」を選択して右クリックし、使用するデータセットのドロップダウンメニューから「ノートブックにデータを書き込む」オプションを選択します。 ノートブックの下部に実行可能コードエントリが表示されます。
または、次のコードセルをコピーして貼り付けることもできます。
psdk <- import("platform_sdk")
dataset <- psdk$models$Dataset(py$get_platform_sdk_client_context())$get_by_id(dataset_id="{DATASET_ID}")
dataset_writer <- psdk$dataset_writer$DatasetWriter(py$get_platform_sdk_client_context(), dataset)
write_tracker <- dataset_writer$write(df, file_format='json')
R ノートブック内の ExperienceEvent データセットにアクセスしてフィルタリングするには、データセットの ID({DATASET_ID}
) と、論理演算子を使用して特定の時間範囲を定義するフィルタールールを指定する必要があります。 時間範囲を定義すると、指定されたページ番号は無視され、データセット全体が考慮されます。
フィルタリング操作のリストを以下に示します。
eq()
:と等しいgt()
:より大きいge()
:より大きいか等しいlt()
:より小さいle()
:より小さいか等しいAnd()
:論理積演算子Or()
:論理和演算子次のセルでは、ExperienceEvent データセットを、2019 年 1 月 1 日から 2019 年 12 月 31 日の終わりまでの間にのみ存在するデータにフィルタリングします。
# R
library(reticulate)
use_python("/usr/local/bin/ipython")
psdk <- import("platform_sdk")
datetime <- import("datetime", convert = FALSE)
py_run_file("~/.ipython/profile_default/startup/platform_sdk_context.py")
client_context <- py$PLATFORM_SDK_CLIENT_CONTEXT
DatasetReader <- psdk$dataset_reader$DatasetReader
dataset_reader <- DatasetReader(py$get_platform_sdk_client_context(), dataset_id="{DATASET_ID}")
df0 <- dataset_reader$
where(dataset_reader["timestamp"]$gt("2019-01-01 00:00:00")$
And(dataset_reader["timestamp"]$lt("2019-12-31 23:59:59"))
)$read()
以下の PySpark ドキュメントでは、次の概念の概要を説明しています。
すべての Spark 2.4 ノートブックでは、次のテンプレートコードを使用してセッションを初期化する必要があります。
from pyspark.sql import SparkSession
spark = SparkSession.builder.getOrCreate()
Spark 2.4 の導入に伴い、PySpark 3(Spark 2.4) ノートブックで使用できるように %dataset
カスタムマジックが提供されました。 IPython カーネルで利用可能なマジックコマンドの詳細については、IPython マジックのドキュメント を参照してください。
用途
%dataset {action} --datasetId {id} --dataFrame {df} --mode batch
説明
PySpark ノートブック(Python 3 カーネル)からデータセットを読み書きするためのカスタム Data Science Workspace マジックコマンド。
名前 | 説明 | 必須 |
---|---|---|
{action} |
データセットに対して実行するアクションのタイプ。 「読み取り」と「書き込み」の 2 つのアクションを使用できます。 | ○ |
--datasetId {id} |
読み取りまたは書き込みを行うデータセットの ID を指定するために使用します。 | ○ |
--dataFrame {df} |
pandas データフレーム。
|
○ |
--mode |
データの読み取り方法を変更する追加パラメーター。 使用できるパラメーターは、「batch」と「interactive」です。 デフォルトでは、モードは「batch」に設定されています。 小規模なデータセットでクエリのパフォーマンスを向上させるには、「インタラクティブ」モードを使用することをお勧めします。 |
○ |
ノートブックデータの制限 セクション内の PySpark テーブルを確認して、mode
を interactive
または batch
に設定する必要があるかどうかを判断します。
例
%dataset read --datasetId 5e68141134492718af974841 --dataFrame pd0 --mode batch
%dataset write --datasetId 5e68141134492718af974842 --dataFrame pd0 --mode batch
データを書き込む前に df.cache()
を使用してデータをキャッシュすると、ノートブックのパフォーマンスが大幅に向上します。 これは、次のエラーが発生した場合に役立ちます。
詳細については、 トラブルシューティングガイド を参照してください。
次の方法を使用して、JupyterLab buy で上記の例を自動生成できます。
JupyterLab の左側のナビゲーションで、「データアイコン」タブ(下でハイライト表示)を選択します。 Datasets ディレクトリと Schemas ディレクトリが表示されます。 「データセット」を選択して右クリックし、使用するデータセットのドロップダウンメニューから「ノートブックにデータを書き込む」オプションを選択します。 ノートブックの下部に実行可能コードエントリが表示されます。
PySpark 3 を使用してローカルデータフレームを作成するには、SQL クエリを使用します。 以下に例を示します。
date_aggregation.createOrReplaceTempView("temp_df")
df = spark.sql('''
SELECT *
FROM sparkdf
''')
local_df
df = spark.sql('''
SELECT *
FROM sparkdf
LIMIT limit
''')
sample_df = df.sample(fraction)
オプションのシードサンプルを指定することもできます。例えば、置き換えのブール値、2 分の 1、長いシードなどです。
PySpark ノートブック内の ExperienceEvent データセットにアクセスしてフィルタリングするには、データセット ID({DATASET_ID}
)、組織の IMS ID、および特定の時間範囲を定義するフィルタールールを指定する必要があります。 フィルタ時間範囲は、関数 spark.sql()
を使用して定義します。関数パラメータは SQL クエリ文字列です。
次のセルでは、ExperienceEvent データセットを、2019 年 1 月 1 日から 2019 年 12 月 31 日の終わりまでの間にのみ存在するデータにフィルタリングします。
# PySpark 3 (Spark 2.4)
from pyspark.sql import SparkSession
spark = SparkSession.builder.getOrCreate()
%dataset read --datasetId {DATASET_ID} --dataFrame df --mode batch
df.createOrReplaceTempView("event")
timepd = spark.sql("""
SELECT *
FROM event
WHERE timestamp > CAST('2019-01-01 00:00:00.0' AS TIMESTAMP)
AND timestamp < CAST('2019-12-31 23:59:59.9' AS TIMESTAMP)
""")
timepd.show()
以下のドキュメントには、次の概念の例が含まれています。
すべての Scala ノートブックでは、次のテンプレートコードを使用してセッションを初期化する必要があります。
import org.apache.spark.sql.{ SparkSession }
val spark = SparkSession
.builder()
.master("local")
.getOrCreate()
Scala では、clientContext
を読み込んで Platform の値を取得して返すことができるので、var userToken
のような変数を定義する必要はありません。 以下の Scala の例では、clientContext
を使用して、データセットの読み取りに必要なすべての値を取得し、返します。
データを書き込む前に df.cache()
を使用してデータをキャッシュすると、ノートブックのパフォーマンスが大幅に向上します。 これは、次のエラーが発生した場合に役立ちます。
詳細については、 トラブルシューティングガイド を参照してください。
import org.apache.spark.sql.{Dataset, SparkSession}
import com.adobe.platform.token.ClientContext
val spark = SparkSession.builder().master("local").config("spark.sql.warehouse.dir", "/").getOrCreate()
val clientContext = ClientContext.getClientContext()
val df1 = spark.read.format("com.adobe.platform.query")
.option("user-token", clientContext.getUserToken())
.option("ims-org", clientContext.getOrgId())
.option("api-key", clientContext.getApiKey())
.option("service-token", clientContext.getServiceToken())
.option("sandbox-name", clientContext.getSandboxName())
.option("mode", "batch")
.option("dataset-id", "5e68141134492718af974844")
.load()
df1.printSchema()
df1.show(10)
要素 | 説明 |
---|---|
df1 | データの読み取りと書き込みに使用される Pandas データフレームを表す変数。 |
user-token | clientContext.getUserToken() を使用して自動的に取得されるユーザートークン。 |
service-token | clientContext.getServiceToken() を使用して自動的に取得されるサービストークン。 |
ims-org | clientContext.getOrgId() を使用して自動的に取得される IMS 組織 ID。 |
api-key | clientContext.getApiKey() を使用して自動的に取得される API キー。 |
ノートブックデータの制限 セクション内の Scala テーブルを調べて、mode
を interactive
または batch
に設定する必要があるかどうかを確認します。
次の方法を使用して、JupyterLab buy で上記の例を自動生成できます。
JupyterLab の左側のナビゲーションで、「データアイコン」タブ(下でハイライト表示)を選択します。 Datasets ディレクトリと Schemas ディレクトリが表示されます。 「データセット」を選択して右クリックし、使用するデータセットのドロップダウンメニューから「ノートブック内のデータを調査」オプションを選択します。 ノートブックの下部に実行可能コードエントリが表示されます。
And
Scala では、clientContext
を読み込んで Platform の値を取得して返すことができるので、var userToken
のような変数を定義する必要はありません。 以下の Scala の例では、clientContext
を使用して、データセットへの書き込みに必要なすべての値を定義し、返します。
データを書き込む前に df.cache()
を使用してデータをキャッシュすると、ノートブックのパフォーマンスが大幅に向上します。 これは、次のエラーが発生した場合に役立ちます。
詳細については、 トラブルシューティングガイド を参照してください。
import org.apache.spark.sql.{Dataset, SparkSession}
import com.adobe.platform.token.ClientContext
val spark = SparkSession.builder().master("local").config("spark.sql.warehouse.dir", "/").getOrCreate()
val clientContext = ClientContext.getClientContext()
df1.write.format("com.adobe.platform.query")
.option("user-token", clientContext.getUserToken())
.option("service-token", clientContext.getServiceToken())
.option("ims-org", clientContext.getOrgId())
.option("api-key", clientContext.getApiKey())
.option("sandbox-name", clientContext.getSandboxName())
.option("mode", "batch")
.option("dataset-id", "5e68141134492718af974844")
.save()
element | description |
---|---|
df1 | データの読み取りと書き込みに使用される Pandas データフレームを表す変数。 |
user-token | clientContext.getUserToken() を使用して自動的に取得されるユーザートークン。 |
service-token | clientContext.getServiceToken() を使用して自動的に取得されるサービストークン。 |
ims-org | clientContext.getOrgId() を使用して自動的に取得される IMS 組織 ID。 |
api-key | clientContext.getApiKey() を使用して自動的に取得される API キー。 |
ノートブックデータの制限 セクション内の Scala テーブルを調べて、mode
を interactive
または batch
に設定する必要があるかどうかを確認します。
Scala を使用してローカルデータフレームを作成するには、SQL クエリが必要です。 以下に例を示します。
sparkdf.createOrReplaceTempView("sparkdf")
val localdf = spark.sql("SELECT * FROM sparkdf LIMIT 1)
Scala ノートブック内の ExperienceEvent データセットにアクセスしてフィルタリングするには、データセット ID({DATASET_ID}
)、組織の IMS ID、および特定の時間範囲を定義するフィルタールールを指定する必要があります。 時間範囲のフィルタリングは、spark.sql()
関数を使用して定義します。関数パラメータは SQL クエリ文字列です。
次のセルでは、ExperienceEvent データセットを、2019 年 1 月 1 日から 2019 年 12 月 31 日の終わりまでの間にのみ存在するデータにフィルタリングします。
// Spark (Spark 2.4)
// Turn off extra logging
import org.apache.log4j.{Level, Logger}
Logger.getLogger("org").setLevel(Level.OFF)
Logger.getLogger("com").setLevel(Level.OFF)
import org.apache.spark.sql.{Dataset, SparkSession}
val spark = org.apache.spark.sql.SparkSession.builder().appName("Notebook")
.master("local")
.getOrCreate()
// Stage Exploratory
val dataSetId: String = "{DATASET_ID}"
val orgId: String = sys.env("IMS_ORG_ID")
val clientId: String = sys.env("PYDASDK_IMS_CLIENT_ID")
val userToken: String = sys.env("PYDASDK_IMS_USER_TOKEN")
val serviceToken: String = sys.env("PYDASDK_IMS_SERVICE_TOKEN")
val mode: String = "batch"
var df = spark.read.format("com.adobe.platform.query")
.option("user-token", userToken)
.option("ims-org", orgId)
.option("api-key", clientId)
.option("mode", mode)
.option("dataset-id", dataSetId)
.option("service-token", serviceToken)
.load()
df.createOrReplaceTempView("event")
val timedf = spark.sql("""
SELECT *
FROM event
WHERE timestamp > CAST('2019-01-01 00:00:00.0' AS TIMESTAMP)
AND timestamp < CAST('2019-12-31 23:59:59.9' AS TIMESTAMP)
""")
timedf.show()
このドキュメントでは、JupyterLab ノートブックを使用してデータセットにアクセスする際の一般的なガイドラインを説明しました。 データセットのクエリに関する詳細な例については、JupyterLab ノートブックの クエリサービス のドキュメントを参照してください。 データセットの調査と視覚化の方法について詳しくは、 ノートブック を使用したデータの分析に関するドキュメントを参照してください。
次の表に、Query Service に使用できるオプションの SQL フラグの概要を示します。
フラグ | 説明 |
---|---|
-h 、--help |
ヘルプメッセージを表示し、終了します。 |
-n 、--notify |
通知のオプションを切り替えてクエリ結果を通知します。 |
-a 、--async |
このフラグを使用すると、クエリが非同期的に実行され、カーネルの実行中にクエリを解放できます。変数にクエリ結果を割り当てる場合、クエリが完了しない場合は定義されない可能性があるので、注意が必要です。 |
-d 、--display |
このフラグを使用すると、結果が表示されなくなります。 |