Spark データフレームで複雑なデータ構造を分割する方法
Spark データフレームでは、構造体やマップなどの複雑なデータ構造を使用して格納できます。ネストされたデータを効率的に処理します。ただし、個々の要素を直接操作するには、これらの構造体をフラット化することが必要になる場合があります。
ネストされた構造体のフラット化
構造体のネストされたフィールドを抽出するには、col関数は * ワイルドカード記号と組み合わせることができます。たとえば、次のデータフレーム スキーマについて考えてみましょう:
|-- data: struct (nullable = true) | |-- id: long (nullable = true) | |-- keyNote: struct (nullable = true) | | |-- key: string (nullable = true) | | |-- note: string (nullable = true) | |-- details: map (nullable = true) | | |-- key: string | | |-- value: string (valueContainsNull = true)
この構造体をフラット化して新しいデータフレームを作成するには、次を使用します:
df.select(df.col("data.*"))
これにより、次のフラット化された構造を持つデータフレームが作成されます。
|-- id: long (nullable = true) |-- keyNote: struct (nullable = true) | |-- key: string (nullable = true) | |-- note: string (nullable = true) |-- details: map (nullable = true) | |-- key: string | |-- value: string (valueContainsNull = true)
ネストされたマップの平坦化
同様に、次の構文を使用してネストされたマップを平坦化できます。
df.select(df.col("data.details").as("map_details"))
これにより、データフレームが作成されます。平坦化されたマップを「map_details」という名前の新しい列として使用します。列は次の構造になります:
|-- map_details: map (nullable = true) | |-- key: string | |-- value: string (valueContainsNull = true)
以上がSpark DataFrame で複雑なデータ構造を平坦化する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。