分析Code WorkbooksWorkbooks言語

注: 以下の翻訳の正確性は検証されていません。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 を有効にする

R はまだセルフサービスで利用できません。

Code Workbook で R トランスフォームを作成できるようにするには、次の2つの条件を満たす必要があります。

  • エンロールメントで R 言語が明示的に有効になっている必要があります。有効化については、Palantir の担当者にお問い合わせください。
  • ワークブックで現在使用している環境に、vector-spark-module-r パッケージが存在する必要があります。これは、次のいずれかの方法で実現できます。
    • Control Panel でプロファイルの設定にある R チェックボックスを切り替えます。これにより、プロファイルの環境に vector-spark-module-r パッケージが自動的に追加されます。
    • パッケージを追加ドロップダウンメニューを使用して、環境に vector-spark-module-r を手動で追加します。

詳しくは、Code Workbook のプロファイルを設定するを参照してください。

Python を有効にする

ワークブックで現在使用している環境に、vector-spark-module-py パッケージが存在する必要があります。これは、次のいずれかの方法で実現できます。

  • Control Panel でプロファイルの設定にある Python チェックボックスを切り替えます。これにより、環境に vector-spark-module-py パッケージが自動的に追加されます。
  • パッケージを追加ドロップダウンメニューを使用して、環境に vector-spark-module-py を手動で追加します。

詳しくは、Code Workbook のプロファイルを設定するを参照してください。

SQL を有効にする

SQL トランスフォームを動作させるために追加のパッケージは必要ありません。そのため、どのプロファイルでも SQL トランスフォームは常にデフォルトで利用可能です。

特定のプロファイルで Python も R も使用する予定がない場合は、環境のサイズを減らすため、関連する vector-spark-module パッケージの削除を検討してください。必要になったときに、いつでも再度追加できます。

Python 入門

Python トランスフォーム

Python トランスフォームは、任意の数の入力、最大1個の出力、および必要に応じて1個以上の可視化を持つ Python 関数として定義されます。トランスフォームのエイリアスを関数の引数として参照すると、Code Workbook はそのエイリアスの出力をトランスフォームの入力として自動的に渡します。Code Workbook のトランスフォームについて詳しくは、トランスフォームの概要ドキュメントを参照してください。

Python トランスフォームの簡単な例として、1個の PySpark DataFrame を入力として受け取り、PySpark の構文を使用してデータを加工し、加工した Spark DataFrame を出力するものが挙げられます。

Copied!
1 2 3 def 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 間の変換

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 14 from 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 3 import pyspark.pandas as p return p.from_pandas(df).to_spark().coalesce(1)

R 入門

R トランスフォーム

R トランスフォームは、任意の数の入力、最大1個の出力、および必要に応じて1個以上の可視化を持つ R 関数として定義されます。トランスフォームのエイリアスを関数の引数として参照すると、Code Workbook はそのエイリアスの出力をトランスフォームの入力として自動的に渡します。Code Workbook のトランスフォームについて詳しくは、トランスフォームの概要ドキュメントを参照してください。

R トランスフォームの簡単な例として、親となる1個の R data.frame を受け取り、R を使用してデータを加工し、1個の R data.frame を出力するものが挙げられます。

Copied!
1 2 3 4 5 child <- 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) }

Spark と R のデータフレーム間の変換

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 15 output_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) }

R のトラブルシューティング

Code Workbook にインポートされたデータセットを R data.frame として読み込むと、データがドライバーに収集され、Spark DataFrame から R data.frame に変換されます。

  • 任意の大きさのデータを R data.frame として読み込むことはできません。データサイズは Spark モジュール上のドライバーメモリーによって制限されます。大規模なデータを扱うには、まずデータセットを Spark DataFrame として読み込み、SparkR を使用してデータを小さく加工してから、SparkR::collect() を呼び出して R data.frame に変換することを検討してください。または、R を使用する前に、Python または SQL を使用してデータを小さく加工してください。
  • 特定のデータ型を R data.frame に収集する際には、既知の問題がいくつかあります。ほとんどの場合、収集時には r-arrow ↗ というライブラリを使用して、シリアライズとデシリアライズを高速化しています。特に、r-arrow を使用する場合、Long、Array、Map、Struct、Datetime 型は変換できません。これらの列を削除するか、ほかのデータ型(String など)にキャストすることを検討してください。これらのデータ型を含む入力を R data.frame として読み込もうとすると、インターフェースに警告が表示されます。

Code Workbook の R はシングルスレッドで動作するため、同じ Spark モジュール上では一度に1個の R ジョブしか実行できません。同時に複数の R ジョブを開始すると、それらは順番に実行されます。キューに入っているジョブは「Code Workbook でキュー待ち」と表示されます。

  • 長時間実行されるジョブや、トランスフォームがデータセットとして保存されるジョブがある場合は、バッチビルドを実行することを推奨します。バッチビルドは専用の Spark モジュール上で実行されるため、同じワークブックや、その Spark モジュールを共有するほかのワークブックで反復作業を続けられます。

SQL 入門

Code Workbook でサポートされている SQL の方言は Spark SQL ↗ です。サポートされている入力と出力のデータ型は Spark DataFrame のみです。

SQL トランスフォームの簡単な例として、2個の入力 DataFrame を結合キーで結合するものが挙げられます。

Copied!
1 2 3 SELECT 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 で入力バーを選択するか、+ ボタンを使用して子ノードを作成する必要があります。