複雑なデータ型の変換
June 12, 2024
ネストされたデータ型を操作する際、Databricks は特定の変換をすぐに最適化します。 次のコード例は、Databricks で複雑でネストされたデータ型を操作するためのパターンを示しています。
ネストされたフィールドをすべて選択する
アスタリスク演算子(*
)を使用して、特定のフィールド内のすべてのフィールドを選択します。
注:
これは、指定された深さでネストされたフィールドのみをアンパックします。
マップまたは配列からネストされた要素を分解する
explode()
関数を使用して、ARRAY
型列とMAP
型列から値をアンパックします。
ARRAY
列には、値がリストとして格納されます。 explode()
で解凍すると、各値は出力の行になります。
from pyspark.sql.functions import explode
df.select(explode("array_name").alias("column_name"))
MAP
列には、順序付けられたキーと値のペアとして値が格納されます。 explode()
で解凍すると、各キーは列になり、値は行になります。
リストまたはセットから配列を作成する
関数 collect_list()
または collect_set()
を使用して、列の値を配列に変換します。 collect_list()
は列内のすべての値を収集し、 collect_set()
は一意の値のみを収集します。
注:
Spark は、どちらの操作の結果の配列内の項目の順序も保証しません。
配列内のマップから列を選択する
また、ドット表記 (.
) を使用して、配列内に含まれるマップ内のフィールドにアクセスすることもできます。 これは、指定されたフィールドのすべての値の配列を返します。
次のデータ構造について考えてみます。
{
"column_name": [
{"field1": 1, "field2":"a"},
{"field1": 2, "field2":"b"}
]
}
次のクエリを使用して、 field1
から値を配列として返すことができます。
ネストされたデータをJSONに変換する
複雑なデータ型を JSON に変換するには、 to_json
関数を使用します。
from pyspark.sql.functions import to_json
df.select(to_json("column_name").alias("json_name"))
クエリまたは DataFrame のすべてのコンテンツをエンコードするには、これをstruct(*)
と組み合わせます。
from pyspark.sql.functions import to_json, struct
df.select(to_json(struct("*")).alias("json_name"))
注:
Databricks は、統合システムとの相互運用性のために複雑なデータ型を変換するためのto_avro
とto_protobuf
もサポートしています。