Notebook의 Jupyterlab 데이터 액세스
지원되는 각 커널은 노트북 내의 데이터 세트 에서 Platform 데이터를 읽을 수 있는 기본 제공 기능을 제공합니다. 현재 Adobe Experience Platform Data Science 작업 영역의 JupyterLab은 , R, PySpark 및 Scala용 Notebook을 Python지원합니다. 그러나 데이터 페이지 매김에 대한 지원은 Python 및 R 전자 필기장으로 제한됩니다. 이 안내서에서는 JupyterLab Notebooks를 사용하여 데이터에 액세스하는 방법에 중점을 둡니다.
시작하기
이 안내서를 읽기 전에 JupyterLab 사용 안내서를 검토하여 JupyterLab에 대한 자세한 소개와 Data Science Workspace에서의 역할에 대해 알아보십시오.
노트북 데이터 제한 notebook-data-limits
다음 정보는 읽을 수 있는 최대 데이터 양, 사용된 데이터 유형 및 데이터를 읽는 데 걸리는 예상 일정 프레임을 정의합니다.
Python 및 R의 경우 40GB RAM으로 구성된 노트북 서버가 벤치마크에 사용되었습니다. PySpark와 Scala의 경우 64GB RAM, 8코어, 2DBU로 구성된 데이터 클러스터(최대 4명의 작업자가 있음)를 아래 설명된 벤치마크에 사용했습니다.
사용되는 ExperienceEvent 스키마 데이터는 1천(1K) 행부터 최대 10억(1B) 행 범위까지 크기가 다양했습니다. PySpark 및 Spark 지표의 경우 10일의 날짜 범위가 XDM 데이터에 사용되었습니다.
임시 스키마 데이터는 Query Service CTAS(Create Table as Select)를 사용하여 사전 처리되었습니다. 이 데이터 또한 최대 10억 행(1B)에 이르는 1,000행(1K)부터 시작하여 크기가 다양했다.
배치 모드와 대화형 모드를 사용해야 하는 경우 mode
PySpark 및 Scala notebooks로 데이터 세트를 읽을 때 대화형 모드 또는 일괄 처리 모드를 사용하여 데이터 세트를 읽을 수 있습니다. 대화형 은 빠른 결과를 위해 만들어지지만 배치 모드는 큰 데이터 세트를 위한 것입니다.
Python Notebook 데이터 제한
XDM ExperienceEvent 스키마: 22분 이내에 XDM 데이터의 최대 2백만 행(~6.1GB 데이터)을 읽을 수 있어야 합니다. 행을 더 추가하면 오류가 발생할 수 있습니다.
임시 스키마: 14분 이내에 XDM(임시)이 아닌 데이터의 최대 500만 행(디스크의 5.6GB 데이터)을 읽을 수 있어야 합니다. 행을 더 추가하면 오류가 발생할 수 있습니다.
R 노트북 데이터 제한
XDM ExperienceEvent 스키마: 13분 이내에 최대 100만 행의 XDM 데이터(디스크의 3GB 데이터)를 읽을 수 있어야 합니다.
임시 스키마: 약 10분 내에 최대 3백만 행의 임시 데이터(디스크에 있는 293MB 데이터)를 읽을 수 있어야 합니다.
PySpark(Python 커널) 전자 필기장 데이터 제한: pyspark-data-limits
XDM ExperienceEvent 스키마: 대화형 모드에서는 최대 500만 행(디스크의 13.42GB 데이터)의 XDM 데이터를 약 20분 내에 읽을 수 있어야 합니다. 대화형 모드는 최대 500만 개의 행만 지원합니다. 더 큰 데이터 세트를 읽으려면 배치 모드로 전환하는 것이 좋습니다. 배치 모드에서는 약 14시간 내에 최대 5억 행(디스크의 경우 1.31TB 이하 데이터)의 XDM 데이터를 읽을 수 있어야 합니다.
광고 임시 스키마: 인터랙티브한 모드에서는 3분 이내에 XDM이 아닌 데이터의 최대 5백만 행(~5.36GB 데이터 디스크)을 읽을 수 있어야 합니다. 일괄 처리 모드에서는 약 18분 내에 XDM이 아닌 데이터의 최대 10억 행(~1.05TB 데이터 디스크)을 읽을 수 있어야 합니다.
Spark (Scala kernel) 전자 필기장 데이터 제한: scala-data-limits
XDM ExperienceEvent 스키마: 대화형 모드에서는 약 18분 내에 최대 500만 행(디스크의 13.42GB 데이터)의 XDM 데이터를 읽을 수 있어야 합니다. 대화형 모드는 최대 500만 개의 행만 지원합니다. 더 큰 데이터 세트를 읽으려면 배치 모드로 전환하는 것이 좋습니다. 배치 모드에서는 약 14시간 내에 최대 5억 행(디스크의 경우 1.31TB 이하 데이터)의 XDM 데이터를 읽을 수 있어야 합니다.
광고 임시 스키마: 대화형 모드에서는 3분 이내에 XDM이 아닌 데이터의 최대 5백만 행(~5.36GB 데이터 디스크)을 읽을 수 있어야 합니다. 배치 모드에서는 약 16분 내에 XDM이 아닌 데이터의 최대 10억 행(~1.05TB 데이터 디스크)을 읽을 수 있어야 합니다.
Python 노트북 python-notebook
Python개의 전자 필기장을 사용하면 데이터 세트에 액세스할 때 데이터에 페이지를 매길 수 있습니다. 페이지 매김이 있거나 없는 데이터를 읽는 샘플 코드는 아래에 나와 있습니다. 사용 가능한 스타터 Python 노트북에 대한 자세한 내용은 JupyterLab 사용 안내서의 JupyterLab 런처 섹션을 참조하십시오.
아래 Python 설명서에서는 다음 개념을 간략하게 설명합니다.
Python의 데이터 세트 읽기 python-read-dataset
페이지 매김 없음:
다음 코드를 실행하면 전체 데이터 세트 값이 읽힙니다. 실행에 성공하면 데이터가 변수 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()
Python의 데이터 세트에 쓰기 write-python
JupyterLab 노트북의 데이터 세트에 작성하려면 JupyterLab의 왼쪽 탐색에서 데이터 아이콘 탭(아래 강조 표시)을 선택합니다. 데이터 세트 및 스키마 디렉터리가 나타납니다. 데이터 세트 를 선택하고 마우스 오른쪽 단추를 클릭한 다음 사용할 데이터 세트의 드롭다운 메뉴에서 전자 필기장에 데이터 쓰기 옵션을 선택합니다. 전자 필기장 하단에 실행 가능한 코드 항목이 나타납니다.
- Notebook 에 데이터 쓰기를 사용하여 선택한 데이터 세트로 쓰기 셀을 생성합니다.
- Notebook 에서 데이터 탐색을 사용하여 선택한 데이터 세트 로 읽기 셀을 생성합니다.
- Notebook 의 데이터 쿼리를 사용하여 선택한 데이터 세트로 기본 쿼리 셀을 생성합니다.
또는 다음 코드 셀을 복사하여 붙여 넣을 수 있습니다. 와 {PANDA_DATAFRAME}
를 모두 {DATASET_ID}
바꾸기.
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')
in을 사용하여 Query Service 데이터 쿼리 Python query-data-python
JupyterLab 을 Platform 사용하면 노트북에서 SQL을 Python 사용하여 Adobe Experience Platform 쿼리 서비스를 통해 데이터에 액세스할 수 있습니다. 를 통해 Query Service 데이터에 액세스하면 실행 시간이 길기 때문에 대규모 데이터 세트를 처리하는 데 유용할 수 있습니다. 를 사용하여 Query Service 데이터를 쿼리하는 경우 처리 시간 제한이 10분입니다.
에서 JupyterLab사용하기 Query Service 전에 SQL 구문🔗에 Query Service 대해 잘 알고 있어야 합니다.
를 사용하여 Query Service 데이터를 쿼리하려면 타겟 데이터 세트 이름을 제공해야 합니다. 데이터 탐색기 를 사용하여 원하는 데이터 세트 를 찾아 필요한 코드 셀을 생성할 수 있습니다. 데이터 세트 목록을 마우스 오른쪽 단추로 클릭하고 Notebook 에서 데이터 쿼리를 클릭하여 Notebook에 두 개의 코드 셀을 생성합니다. 이 두 셀은 아래에 자세히 설명되어 있습니다.
에서 활용 Query Service 하려면 먼저 작업 Python 중인 노트북과 Query Service.JupyterLab 이 작업은 첫 번째로 생성된 셀을 실행하여 수행할 수 있습니다.
qs_connect()
두 번째로 생성된 셀에서 첫 번째 줄은 SQL 쿼리 앞에 정의되어야 합니다. 기본적으로 생성된 셀은 쿼리 결과를 Pandas 데이터 프레임으로 저장하는 선택적 변수(df0
)를 정의합니다.
이 -c QS_CONNECTION
인수는 필수이며 커널에 에 대해 Query ServiceSQL 쿼리를 실행하도록 지시합니다. 추가 인수 목록은 부록을 참조하십시오.
%%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}
ExperienceEvent 데이터 필터링 python-filter
Notebook의 Python 데이터 세트에 액세스하고 필터링 ExperienceEvent 하려면 논리 연산자를 사용하여 특정 시간 범위를 정의하는 필터 규칙과 함께 데이터 세트{DATASET_ID}
()의 ID를 제공해야 합니다. 시간 범위가 정의되면 지정된 페이지 매김이 무시되고 전체 데이터 세트 형식이 고려됩니다.
필터링 연산자 목록은 다음과 같습니다.
eq()
: 같음gt()
: 보다 큼ge()
: 크거나 같음lt()
: 보다 작음le()
: 작거나 같음And()
: 논리 AND 연산자Or()
: 논리 OR 연산자
다음 셀은 2019년 1월 1일부터 2019년 12월 31일 말까지 독점적으로 존재하는 데이터에 ExperienceEvent 데이터 집합을 필터링합니다.
# 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-notebooks
R Notebooks에서는 데이터 세트에 액세스할 때 데이터에 페이지를 지정할 수 있습니다. 페이지 매김이 있거나 없는 데이터를 읽는 샘플 코드는 아래에 나와 있습니다. 사용 가능한 스타터 R 노트북에 대한 자세한 내용은 JupyterLab 사용 안내서의 JupyterLab 런처 섹션을 참조하십시오.
아래 R 설명서에서는 다음 개념을 간략하게 설명합니다.
R의 데이터 세트에서 읽기 r-read-dataset
페이지 매김 없음:
다음 코드를 실행하면 전체 데이터 세트가 읽힙니다. 실행이 성공하면 데이터는 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()
R의 데이터 세트에 쓰기 write-r
JupyterLab 노트북의 데이터 세트에 작성하려면 JupyterLab의 왼쪽 탐색에서 데이터 아이콘 탭(아래 강조 표시)을 선택합니다. 데이터 세트 및 스키마 디렉터리가 나타납니다. 데이터 세트 를 선택하고 마우스 오른쪽 단추를 클릭한 다음 사용할 데이터 세트의 드롭다운 메뉴에서 전자 필기장에 데이터 쓰기 옵션을 선택합니다. 전자 필기장 하단에 실행 가능한 코드 항목이 나타납니다.
- 전자 필기장에 데이터 쓰기 를 사용하여 선택한 데이터 집합으로 쓰기 셀을 생성합니다.
- Notebook 에서 데이터 탐색을 사용하여 선택한 데이터 세트 로 읽기 셀을 생성합니다.
또는 다음 코드 셀을 복사하여 붙여 넣을 수 있습니다.
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')
ExperienceEvent 데이터 필터링 r-filter
R Notebook에서 ExperienceEvent 데이터 세트 액세스하고 필터링하려면 논리 연산자를 사용하여 특정 시간 범위를 정의하는 필터 규칙과 함께 데이터 세트{DATASET_ID}
()의 ID를 제공해야 합니다. 시간 범위가 정의되면 지정된 페이지 매김이 무시되고 전체 데이터 세트 형식이 고려됩니다.
필터링 연산자 목록은 다음과 같습니다.
eq()
: 같음gt()
: 보다 큼ge()
: 크거나 같음lt()
:미만le()
: 작거나 같음And()
: 논리 AND 연산자Or()
: 논리 OR 연산자
다음 셀은 2019년 1월 1일부터 2019년 12월 31일 말까지 독점적으로 존재하는 데이터에 ExperienceEvent 데이터 집합을 필터링합니다.
# 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 3 노트북 pyspark-notebook
아래 PySpark 설명서에는 다음과 같은 개념이 간략하게 설명되어 있습니다.
sparkSession 초기화 spark-initialize
모든 Spark 2.4 Notebook에서는 다음 상용구 코드를 사용하여 세션을 초기화해야 합니다.
from pyspark.sql import SparkSession
spark = SparkSession.builder.getOrCreate()
%데이터 세트 사용Using %dataset to read and write with a PySpark 3 notebook magic
2.4 %dataset
의 Spark 도입과 함께 PySpark 3(Spark2.4) 노트북에서 사용할 수 있는 사용자 지정 매직이 제공됩니다. IPython 커널에서 사용할 수 있는 매직 명령에 대한 자세한 내용은 IPython 매직 문서를 방문 참조하세요🔗.
사용
%dataset {action} --datasetId {id} --dataFrame {df} --mode batch
설명
노트북에서Python 데이터 세트( 3 커널)를 PySpark 읽거나 쓰기 위한 사용자 지정 Data Science Workspace 매직 명령입니다.
{action}
--datasetId {id}
--dataFrame {df}
팬더 데이터 프레임입니다.
- 작업이 "읽기"이면 {df}은(는) 데이터 집합 읽기 작업의 결과를 사용할 수 있는 변수입니다(예: 데이터 프레임).
- 작업이 "쓰기"이면 이 데이터 프레임 {df}이(가) 데이터 집합에 기록됩니다.
--mode
작은 데이터 세트에서 쿼리 성능을 높이려면 "대화형" 모드를 사용하는 것이 좋습니다.
예
- 예제 읽기:
%dataset read --datasetId 5e68141134492718af974841 --dataFrame pd0 --mode batch
- 예제 작성:
%dataset write --datasetId 5e68141134492718af974842 --dataFrame pd0 --mode batch
df.cache()
을(를) 사용하여 데이터를 캐시하면 전자 필기장 성능이 크게 향상됩니다. 이 방법은 다음과 같은 오류가 발생하는 경우에 도움이 될 수 있습니다.- 단계 실패로 인해 작업이 중단되었습니다 … 각 파티션에 동일한 수의 요소가 있는 RDD만 압축할 수 있습니다.
- 원격 RPC 클라이언트 연결이 끊어지고 다른 메모리 오류가 발생했습니다.
- 데이터 세트를 읽고 쓸 때 성능이 저하됩니다.
다음 방법을 사용하여 JupyterLab 구매에서 위의 예를 자동으로 생성할 수 있습니다.
JupyterLab의 왼쪽 탐색에서 데이터 아이콘 탭(아래에 강조 표시됨)을 선택합니다. 데이터 세트 및 스키마 디렉터리가 나타납니다. 데이터 세트를 선택하고 마우스 오른쪽 단추를 클릭한 다음, 사용하려는 데이터 세트의 드롭다운 메뉴에서 Notebook 에 데이터 쓰기 옵션을 선택합니다 . Notebook의 아래쪽에 실행 코드 항목이 나타납니다.
- Notebook 에서 데이터 탐색을 사용하여 읽기 셀을 생성합니다.
- 전자 필기장에 데이터 쓰기 를 사용하여 쓰기 셀을 생성합니다.
로컬 데이터 프레임 만들기 pyspark-create-dataframe
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)
ExperienceEvent 데이터 필터링 pyspark-filter-experienceevent
PySpark Notebook의 ExperienceEvent 데이터 세트에 액세스하고 필터링하려면 데이터 세트 ID({DATASET_ID}
), 조직의 IMS ID 및 특정 시간 범위를 정의하는 필터 규칙을 제공해야 합니다. 필터링 시간 범위는 함수 spark.sql()
를 사용하여 정의되며, 여기서 function 매개 변수는 SQL 쿼리 문자열 입니다.
다음 셀은 2019년 1월 1일부터 2019년 12월 31일 말 사이에만 존재하는 데이터로 데이터 세트 필터링 ExperienceEvent 합니다.
# 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-notebook
아래 설명서에는 다음 개념에 대한 예제가 포함되어 있습니다.
SparkSession 초기화 중 scala-initialize
모든 Scala Notebooks에서는 다음 상용구 코드로 세션을 초기화해야 합니다.
import org.apache.spark.sql.{ SparkSession }
val spark = SparkSession
.builder()
.master("local")
.getOrCreate()
데이터 세트 읽기 read-scala-dataset
Scala에서는 Platform 값을 가져오고 반환하기 위해 가져올 clientContext
수 있으므로 와 같은 var userToken
변수를 정의할 필요가 없습니다. 아래 clientContext
Scala 예제에서 는 데이터 세트 읽기에 필요한 모든 값을 가져오고 반환하는 데 사용됩니다.
df.cache()
데이터를 캐싱하면 Notebook 성능이 크게 향상될 수 있습니다. 이 방법은 다음과 같은 오류가 발생하는 경우에 도움이 될 수 있습니다.- 단계 실패로 인해 작업이 중단되었습니다 … 각 파티션에 동일한 수의 요소가 있는 RDD만 압축할 수 있습니다.
- 원격 RPC 클라이언트 연결 해제 및 기타 메모리 오류입니다.
- 데이터 세트를 읽고 쓸 때 성능이 저하됩니다.
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)
clientContext.getUserToken()
자동으로 가져오는 사용자 토큰입니다.clientContext.getServiceToken()
자동으로 가져오는 서비스 토큰입니다.clientContext.getOrgId()
자동으로 가져오는 조직 ID입니다.clientContext.getApiKey()
자동으로 가져오는 API 키입니다.batch
로 설정해야 interactive
하는지 mode
여부를 결정합니다.다음 방법을 사용하여 JupyterLab 구매에서 위의 예를 자동으로 생성할 수 있습니다.
JupyterLab의 왼쪽 탐색에서 데이터 아이콘 탭(아래에 강조 표시됨)을 선택합니다. 데이터 세트 및 스키마 디렉터리가 나타납니다. 데이터 세트 를 선택하고 마우스 오른쪽 단추를 클릭한 다음 사용할 데이터 세트의 드롭다운 메뉴에서 Notebook에서 데이터 탐색 옵션을 선택합니다. 전자 필기장 하단에 실행 가능한 코드 항목이 나타납니다.
및
- Notebook에서 데이터 탐색 을 사용하여 읽기 셀을 생성합니다.
- 전자 필기장에 데이터 쓰기 를 사용하여 쓰기 셀을 생성합니다.
데이터 세트에 쓰기 scala-write-dataset
Scala에서 clientContext
을(를) 가져와서 플랫폼 값을 가져오고 반환할 수 있으므로 var userToken
과(와) 같은 변수를 정의할 필요가 없습니다. 아래 Scala 예제에서 clientContext
은(는) 데이터 집합에 쓰는 데 필요한 모든 필수 값을 정의하고 반환하는 데 사용됩니다.
df.cache()
을(를) 사용하여 데이터를 캐시하면 전자 필기장 성능이 크게 향상됩니다. 다음 오류가 발생하는 경우 도움이 될 수 있습니다.- 단계 오류로 인해 작업이 중단되었습니다. 각 파티션에 동일한 수의 요소가 있는 RDD만 압축할 수 있습니다.
- 원격 RPC 클라이언트 연결이 끊어지고 다른 메모리 오류가 발생했습니다.
- 데이터 세트를 읽고 쓸 때 성능이 저하됩니다.
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()
clientContext.getUserToken()
을(를) 사용하여 자동으로 가져오는 사용자 토큰입니다.clientContext.getServiceToken()
자동으로 가져오는 서비스 토큰입니다.clientContext.getOrgId()
을(를) 사용하여 자동으로 가져오는 조직 ID입니다.clientContext.getApiKey()
을(를) 사용하여 자동으로 가져오는 API 키입니다.로컬 데이터 프레임 만들기 scala-create-dataframe
Scala를 사용하여 로컬 데이터 프레임을 만들려면 SQL 쿼리가 필요합니다. 예:
sparkdf.createOrReplaceTempView("sparkdf")
val localdf = spark.sql("SELECT * FROM sparkdf LIMIT 1)
ExperienceEvent 데이터 필터링 scala-experienceevent
Scala Notebook에서 ExperienceEvent 데이터 세트에 액세스하고 필터링하려면 데이터 세트 ID({DATASET_ID}
), 조직의 IMS ID 및 특정 시간 범위를 정의하는 필터 규칙을 제공해야 합니다. spark.sql()
함수를 사용하여 필터링 시간 범위를 정의합니다. 여기서 함수 매개 변수는 SQL 쿼리 문자열입니다.
다음 셀은 2019년 1월 1일부터 2019년 12월 31일 말까지 독점적으로 존재하는 데이터로 ExperienceEvent 데이터 집합을 필터링합니다.
// 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 플래그 optional-sql-flags-for-query-service
이 표에서는 에 사용할 Query Service수 있는 선택적 SQL 플래그에 대해 간략하게 설명합니다.
-h
, --help
-n
, --notify
-a
, --async
-d
, --display