注: 以下の翻訳の正確性は検証されていません。AIPを利用して英語版の原文から機械的に翻訳されたものです。
Code Workbook は現在、Python、R、SQL の3つの言語をサポートしています。
Code Workbook で現在サポートされている Python のバージョンには、Python 3.10 と Python 3.12 が含まれます。それより古いバージョンの Python には対応しておらず、それらを使用する環境は解決に失敗します。Palantir Foundry は Python Developer ドキュメントでサポート終了とされている ↗ Python バージョンのサポートを終了するため、利用可能な最新バージョンの Python を使用することを強く推奨します。
現在サポートされている R のバージョンには、R 3.6、R 4.0、R 4.1、R 4.2 が含まれます。R 3.3、R 3.4、R 3.5 には対応しておらず、それらの環境は初期化に失敗します。
Code Workbook でサポートされている SQL の方言は Spark SQL ↗ です。
Code Workbook のプロファイルで特定の言語を有効にするには、Code Workbook のプロファイルを設定するドキュメントの Conda 環境セクションを参照してください。サポートされている言語ごとの例は、以下の Python、R、SQL の入門セクションに記載しています。
サポートされている言語を動作させるには、以下のセクションで説明する特定の設定が必要です。
R はまだセルフサービスで利用できません。
Code Workbook で R トランスフォームを作成できるようにするには、次の2つの条件を満たす必要があります。
vector-spark-module-r パッケージが存在する必要があります。これは、次のいずれかの方法で実現できます。
vector-spark-module-r パッケージが自動的に追加されます。vector-spark-module-r を手動で追加します。詳しくは、Code Workbook のプロファイルを設定するを参照してください。
ワークブックで現在使用している環境に、vector-spark-module-py パッケージが存在する必要があります。これは、次のいずれかの方法で実現できます。
vector-spark-module-py パッケージが自動的に追加されます。vector-spark-module-py を手動で追加します。詳しくは、Code Workbook のプロファイルを設定するを参照してください。
SQL トランスフォームを動作させるために追加のパッケージは必要ありません。そのため、どのプロファイルでも SQL トランスフォームは常にデフォルトで利用可能です。
特定のプロファイルで Python も R も使用する予定がない場合は、環境のサイズを減らすため、関連する vector-spark-module パッケージの削除を検討してください。必要になったときに、いつでも再度追加できます。
Python トランスフォームは、任意の数の入力、最大1個の出力、および必要に応じて1個以上の可視化を持つ Python 関数として定義されます。トランスフォームのエイリアスを関数の引数として参照すると、Code Workbook はそのエイリアスの出力をトランスフォームの入力として自動的に渡します。Code Workbook のトランスフォームについて詳しくは、トランスフォームの概要ドキュメントを参照してください。
Python トランスフォームの簡単な例として、1個の PySpark DataFrame を入力として受け取り、PySpark の構文を使用してデータを加工し、加工した Spark DataFrame を出力するものが挙げられます。
Copied!1 2 3def child(input_spark_dataframe): from pyspark.sql import functions as F return input_spark_dataframe.filter(F.col('A') == 'value').withColumn('new_column', F.lit(2))
Python トランスフォーム内では、Spark と Pandas のデータフレーム間の変換を簡単に行えます。
Copied!1 2 3 4# PySpark に変換します spark_df = spark.createDataFrame(pandas_df) # pandas に変換します pandas_df = spark_df.toPandas()
pandas への変換では、データがドライバーに収集されます。そのため、データサイズは Spark モジュール上の利用可能なドライバーメモリーによって制限されます。大規模なデータセットを扱う場合は、まず Spark を使用してデータを絞り込んで集計し、その後 pandas DataFrame に収集することを検討してください。
Copied!1 2 3 4 5 6 7 8 9 10 11 12 13 14from pyspark.sql import functions as F def filtering_before_pandas(input_spark_dataframe): # PySpark を使ってデータを絞り込みます filtered_spark_df = input_spark_dataframe.select("name", "age").filter(F.col("age") <= 18) # pandas の df に変換し、データをドライバーに収集します pandas_df = filtered_spark_df.toPandas() # pandas で処理を実行します mean_age = pandas_df["age"].mean() pandas_df["age_difference_to_mean"] = pandas_df["age"] - mean_age # 処理結果の DataFrame を出力します return pandas_df
並べ替え済みの pandas DataFrame の順序を保存後も保持するには、単一パーティションの Spark DataFrame として保存します。
Copied!1 2 3import pyspark.pandas as p return p.from_pandas(df).to_spark().coalesce(1)
R トランスフォームは、任意の数の入力、最大1個の出力、および必要に応じて1個以上の可視化を持つ R 関数として定義されます。トランスフォームのエイリアスを関数の引数として参照すると、Code Workbook はそのエイリアスの出力をトランスフォームの入力として自動的に渡します。Code Workbook のトランスフォームについて詳しくは、トランスフォームの概要ドキュメントを参照してください。
R トランスフォームの簡単な例として、親となる1個の R data.frame を受け取り、R を使用してデータを加工し、1個の R data.frame を出力するものが挙げられます。
Copied!1 2 3 4 5child <- def(r_dataframe) { library(tidyverse) new_df <- r_dataframe %>% dplyr::select(col_A, col_B) %>% dplyr::filter(col_A == true) %>% dplyr::mutate(new_column=1000) return(new_df) }
R トランスフォーム内では、Spark DataFrame と R data.frame 間の変換を簡単に行えます。
Copied!1 2 3 4 5# Spark DataFrame から R data.frame に変換します new_r_df <- SparkR::collect(spark_df) # R data.frame から Spark DataFrame に変換します spark_df <- SparkR::as.DataFrame(r_df)
R data.frame への変換では、データがドライバーに収集されます。そのため、データサイズは Spark モジュール上の利用可能なドライバーメモリーによって制限されます。大規模なデータセットを扱う場合は、まず Spark を使用してデータを絞り込んで集計し、その後 R data.frame に収集することを検討してください。
Copied!1 2 3 4 5 6 7 8 9 10 11 12 13 14 15output_dataset <- function(spark_df) { library(tidyverse) # SparkR を使ってデータを絞り込みます input_dataset_filtered <- SparkR::select(spark_df, 'column_A', 'column_B') # R data.frame に変換します local_df <- SparkR::collect(input_dataset_filtered) # tidyverse の関数を使ってデータを加工します local_df <- local_df %>% dplyr::filter(column_A == true) %>% dplyr::mutate(new_column = 1000) # R data.frame を出力します return(local_df) }
Code Workbook にインポートされたデータセットを R data.frame として読み込むと、データがドライバーに収集され、Spark DataFrame から R data.frame に変換されます。
SparkR::collect() を呼び出して R data.frame に変換することを検討してください。または、R を使用する前に、Python または SQL を使用してデータを小さく加工してください。Long、Array、Map、Struct、Datetime 型は変換できません。これらの列を削除するか、ほかのデータ型(String など)にキャストすることを検討してください。これらのデータ型を含む入力を R data.frame として読み込もうとすると、インターフェースに警告が表示されます。Code Workbook の R はシングルスレッドで動作するため、同じ Spark モジュール上では一度に1個の R ジョブしか実行できません。同時に複数の R ジョブを開始すると、それらは順番に実行されます。キューに入っているジョブは「Code Workbook でキュー待ち」と表示されます。
Code Workbook でサポートされている SQL の方言は Spark SQL ↗ です。サポートされている入力と出力のデータ型は Spark DataFrame のみです。
SQL トランスフォームの簡単な例として、2個の入力 DataFrame を結合キーで結合するものが挙げられます。
Copied!1 2 3SELECT table_b.col_A, table_b.col_B, table_a.* FROM table_a JOIN table_b ON table_a.col_C == table_B.col_C
SQL ノードに親を追加するには、コード内でエイリアスを参照するだけでは不十分です。UI で入力バーを選択するか、+ ボタンを使用して子ノードを作成する必要があります。