> 데이터 베이스 > MySQL 튜토리얼 > 중첩된 데이터 구조(맵, 배열, 구조체)를 사용하여 Spark SQL DataFrame을 쿼리하는 방법은 무엇입니까?

중첩된 데이터 구조(맵, 배열, 구조체)를 사용하여 Spark SQL DataFrame을 쿼리하는 방법은 무엇입니까?

Patricia Arquette
풀어 주다: 2025-01-21 11:36:09
원래의
142명이 탐색했습니다.

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에는 배열 작업에 사용할 수 있는 필터, 변환, 집계 및 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_max
  • 평평하게
  • arrays_zip
  • array_union
  • 슬라이스

액세스 매핑

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_* 함수

  • map_keys
  • 지도_값

액세스 구조

전체 경로 지점 구문

<code>df.select($"structColumn.field").show</code>
로그인 후 복사

그 중 field는 구조 내 필수 필드의 이름을 나타냅니다.

중첩 구조 배열에 액세스

중첩 구조 배열의 필드는 도트 구문, 필드 이름 및 열 메서드의 조합을 사용하여 액세스할 수 있습니다.

도트 구문

<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 DataFrame을 쿼리하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿