ホームページ > データベース > mysql チュートリアル > ネストされたデータ構造 (マップ、配列、構造体) を使用して Spark SQL データフレームをクエリするにはどうすればよいですか?

ネストされたデータ構造 (マップ、配列、構造体) を使用して Spark SQL データフレームをクエリするにはどうすればよいですか?

Patricia Arquette
リリース: 2025-01-21 11:36:09
オリジナル
194 人が閲覧しました

How to Query Spark SQL DataFrames with Nested Data Structures (Maps, Arrays, Structs)?

Spark SQL を使用して複合型データ フレームをクエリする

はじめに

Spark SQL は、マップや配列など、データ フレームに格納されている複合型のクエリをサポートしています。このガイドでは、ネストされたデータ構造にアクセスして操作するための構文と方法の概要を説明します。

配列にアクセス

Column.getItem メソッド

<code>df.select($"arrayColumn".getItem(index)).show</code>
ログイン後にコピー

ここで、index は配列内の必要な要素の位置を表します。

Hive 角かっこ構文

<code>sqlContext.sql("SELECT arrayColumn[index] FROM df").show</code>
ログイン後にコピー

ユーザー定義関数 (UDF)

<code>val get_ith = udf((xs: Seq[Int], i: Int) => Try(xs(i)).toOption)

df.select(get_ith($"arrayColumn", lit(index))).show</code>
ログイン後にコピー

配列のフィルタリングと変換

Spark 2.4 では、配列の操作に使用できる filter、transform、aggregate、array_* 関数などの組み込み関数が導入されています。

フィルター

<code>df.selectExpr("filter(arrayColumn, x -> x % 2 == 0) arrayColumn_even").show</code>
ログイン後にコピー

変身

<code>df.selectExpr("transform(arrayColumn, x -> x + 1) arrayColumn_inc").show</code>
ログイン後にコピー

集計

<code>df.selectExpr("aggregate(arrayColumn, 0, (acc, x) -> acc + x, acc -> acc) arrayColumn_sum").show</code>
ログイン後にコピー

その他の配列関数

  • array_distinct
  • 配列最大
  • 平らにする
  • arrays_zip
  • 配列結合
  • スライス

アクセスマッピング

Column.getField メソッド

<code>df.select($"mapColumn".getField("key")).show</code>
ログイン後にコピー

ここで、 key はマップ内の必要なキーの名前を表します。

Hive 角かっこ構文

<code>sqlContext.sql("SELECT mapColumn['key'] FROM df").show</code>
ログイン後にコピー

フルパスポイント構文

<code>df.select($"mapColumn.key").show</code>
ログイン後にコピー

ユーザー定義関数 (UDF)

<code>val get_field = udf((kvs: Map[String, String], k: String) => kvs.get(k))

df.select(get_field($"mapColumn", lit("key"))).show</code>
ログイン後にコピー

map_* 関数

  • マップキー
  • マップ値

アクセス構造

フルパスポイント構文

<code>df.select($"structColumn.field").show</code>
ログイン後にコピー

このうち、field は構造内の必須フィールドの名前を表します。

入れ子になった構造配列にアクセスします

ネストされた構造体配列のフィールドには、ドット構文、フィールド名、および Column メソッドの組み合わせを使用してアクセスできます。

ドット構文

<code>df.select($"nestedArrayColumn.foo").show</code>
ログイン後にコピー

データフレーム API

<code>df.select($"nestedArrayColumn.vals".getItem(index).getItem(innerIndex)).show</code>
ログイン後にコピー

追加メモ

  • ユーザー定義型 (UDT) のフィールドには、UDF を使用してアクセスできます。
  • ネストされたデータを含む一部の操作では、パターンを平坦化するか、コレクションを拡張する必要がある場合があります。
  • JSON 列は、get_json_object 関数と from_json 関数を使用してクエリできます。

以上がネストされたデータ構造 (マップ、配列、構造体) を使用して Spark SQL データフレームをクエリするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート