Snowpark Connect for Spark 互換ガイド¶
このガイドでは、 Snowpark Connect for Spark Spark の実装 DataFrameAPIs とネイティブApache Sparkの互換性を文書化しています。Sparkワークロードを Snowpark Connect for Spark に移動する際に、主な違い、サポートされていない機能、および移行の考慮事項をユーザーが理解できるようにすることを目的としています。
Snowpark Connect for Spark は Snowflake実行エンジンの上での、なじみのある Spark DataFrameAPI エクスペリエンスの提供を目標としています。ただし、このトピックで説明する互換性のギャップがあります。このガイドは、これらの違いを説明し、移行を計画して適応させるのに役立ちます。これらは将来のリリースで対処される可能性があります。
DataTypes¶
サポートされていないデータ型¶
暗黙的なデータ型変換¶
Snowpark Connect for Spark を使用する場合は、データ型の処理方法に注意してください。Snowpark Connect for Spark は暗黙的に LongType として ByteType、 ShortType`および :code:`IntegerType を表します。 これは、 ByteType、 ShortType または IntegerType`で列やデータを定義することができる場合、データは :code:`LongType として Snowpark Connect for Spark によって表示され、返されることを意味します。同様に、特定の操作とコンテキストに応じた暗黙的な変換が FloatType および DoubleType で起こることがあります。Snowflake 実行エンジンは内部的にデータ型の圧縮を処理し、実際にデータを Byte または :code:`Short`として保存することができます。ただし、これらは実装の詳細とみなされ、エンドユーザーに公開されません。
意味的には、この表現は Spark クエリの正確さに影響を与えません。
ネイティブ PySpark からのデータ型 |
Snowpark Connect for Spark からのデータ型 |
|---|---|
|
|
|
|
|
|
|
|
次の例は、Sparkと Snowpark Connect for Spark のクエリ結果でのデータ型処理方法の違いを示しています。
クエリ¶
Spark¶
Snowpark Connect for Spark¶
NullType ニュアンス¶
Snowpark Connect for Spark は、Sparkでサポートされている NullType データ型をサポートしていません。これにより、データフレームの Null や None を使用すると、動作が変更されます。
Sparkでは、リテラル NULL (例: lit(None))は、 NullType として自動的に推測されます。Snowpark Connect for Spark 内では、スキーマ推論中は StringType として推測されます。
ArrayType MapType および ObjectType の構造化データ型。¶
構造化型のサポートは Snowpark Connect for Spark ではデフォルトでは利用できませんが、 ARRAY、 MAP および Object データ型は一般的な型付けされていないコレクションとして扱われます。これは、構造化型のサポートによって提供されるものとは異なり、要素型、フィールド名、スキーマ、またはNULL値の許容が強制されないことを意味します。
このサポートと依存関係がある場合は、アカウントチームと協力して、アカウントでこの機能を有効にしてください。
サポートされていない Spark APIs¶
以下は、従来の Spark および Spark Connect ではサポートされていますが、Snowpark Connect for Spark ではサポートされていない APIsです。
Dataframe.hint: Snowpark Connect for Spark は、データフレームに設定されたヒントを無視します。Snowflake クエリオプティマイザーは、最も効率的な実行戦略を自動的に決定します。
DataFrame.repartition:これは Snowpark Connect for Spark の無処理です。Snowflake は、分散コンピューティングインフラストラクチャ全体でのデータ配分とパーティション分割を自動的に管理します。
`pyspark RDD<https://spark.apache.org/docs/latest/api/python/reference/api/pyspark.RDD.html>`_: RDDAPIs は Spark Connect ではサポートされていません( Snowpark Connect for Spark を含む)。
UDF の相違¶
StructType の相違¶
Sparkがユーザー定義関数(UDF)に使用するため StructType を変換するとき、Python の tuple 型に変換します。Snowpark Connect for Spark は StructType を Pythonの:code:dict 型に変換します。これには、要素のアクセスと出力に基本的な違いがあります。
Sparkは0、1、2、3などのインデックスにアクセスします。
Snowpark Connect for Spark は「_1」、「_2」などを使用してインデックスにアクセスします。
反復子型の UDFs¶
反復子は、戻り型または入力型としてサポートされていません。
Python UDF へのファイルのインポート¶
Snowpark Connect for Spark を使用すると、Python UDFs で外部ライブラリとファイルを指定できます。Snowflakeには、コードの実行コンテキストにPythonファイルとアーカイブが含まれています。追加の手順なしで、これらの UDF に含まれるファイルから関数をインポートできます。この依存関係の動作は、 ステージからアップロードされたコードを使用したPython UDF の作成 で説明されているように機能します。
外部ライブラリとファイルを含めるには、 snowpark.connect.udf.imports 構成設定の値としてファイルへのステージパスを指定します。構成値は、ファイルへのステージパスの配列である必要があります。パスはコンマで区切られます。
次の例のコードには、 UDF の実行コンテキストの2つのファイルが含まれています。UDF はこれらのファイルから関数をインポートし、ロジックで使用します。
snowpark.connect.udf.imports 設定を使用して、コードが読み取る必要のあるデータなど、他の種類のファイルも含めます。これを行う場合、コードは含まれているファイルからのみ読み取る必要があることに注意してください。関数の実行が終了すると、そのようなファイルへの書き込みは失われます。
Lambda 関数の制限¶
ユーザー定義関数(UDFs)はラムダ式内ではサポートされていません。これには、カスタム UDFs と、基になる実装が Snowflake UDFs に依存する特定の組み込み関数の両方が含まれます。Lambda式内で UDFを使用しようとするとエラーになります。
パス依存モジュールの使用¶
Python UDF 本文が、正確なパスを必要とするモジュールをインポートする場合は、追加の手順を実行する必要があります。UDFs の依存関係をロードする場合に、Snowflakeは元のパスを保持せずにすべてのファイルを作業ディレクトリに配置します。元の構造を保持するには、依存関係を圧縮し、addArtifacts または snowpark.connect.udf.python.imports 構成のいずれかを使用して、SCOS のインポートとして追加する必要があります。
データソース¶
データソース |
PySpark と比較した互換性の問題 |
|---|---|
Avro |
ファイル型はサポートされていません。 |
CSV |
以下では保存モードはサポートされていません: 以下に示すのは既知の制限です。
|
JSON |
以下では保存モードはサポートされていません: 以下に示すのは既知の制限です。
|
Orc |
ファイル型はサポートされていません。 |
Parquet |
以下では保存モードはサポートされていません: 以下に示すのは既知の制限です。
|
テキスト |
以下では保存モードはサポートされていません: 以下に示すのは既知の制限です。
|
XML |
以下では保存モードはサポートされていません: 以下に示すのは既知の制限です。
|
Snowflakeテーブル |
テーブルへの書き込みには、プロバイダー形式は必要ありません。 バケットとパーティション分割はサポートされていません。 ストレージの形式とバージョン管理はサポートされていません。 |
カタログ¶
Snowflake Horizon カタログ プロバイダーのサポート¶
カタログ プロバイダーとしてサポートされているのはSnowflakeのみです。
サポートされていないカタログ APIs¶
registerFunctionlistFunctionsgetFunctionfunctionExistscreateExternalTable
部分的にサポートされているカタログ APIs¶
createTable(外部テーブルのサポートなし)
Iceberg¶
Snowflake 管理 Iceberg テーブル¶
Spark 用 Snowpark Connectは、外部で管理された Iceberg テーブルやカタログリンクのデータベースを含む Apache Iceberg™テーブルと動作します。
読む¶
履歴スナップショット、分岐、増分読み取りを含む Time Travel はサポートされていません。
書き込み¶
テーブルを作成するための Spark SQL の使用はサポートされていません。
スキーマのマージはサポートされていません。
テーブルを作成するには、以下が必要です。
外部ボリュームを作成します。
以下のいずれかの方法で、外部ボリュームニーズをテーブル作成にリンクします。
データベースに EXTERNAL_VOLUME を設定します。
:code:`snowpark.connect.iceberg.external_volume`を Sparkの構成に設定します。
外部管理 Iceberg テーブル¶
読む¶
Snowflakeの管理されていないテーブルエンティティを作成する必要があります。
履歴スナップショット、分岐、増分読み取りを含む Time Travel はサポートされていません。
書き込み¶
テーブルの作成はサポートされていません。
既存のIceberg テーブルへの書き込みはサポートされています。