本文旨在全面介紹如何查詢Spark SQL DataFrame中地圖和陣列等複雜類型。它討論了有效存取和操作嵌套資料的各種技術和函數。
Spark SQL支援多種方法從陣列中檢索元素:
getItem方法: 根據索引擷取特定元素。
<code> df.select($"an_array".getItem(1)).show</code>
Hive方括號語法: 使用Hive風格的方括號存取索引元素。
<code> sqlContext.sql("SELECT an_array[1] FROM df").show</code>
UDF: 使用使用者自訂函數(UDF)指定動態索引。
<code> val get_ith = udf((xs: Seq[Int], i: Int) => Try(xs(i)).toOption) df.select(get_ith($"an_array", lit(1))).show</code>
要從地圖中擷取鍵值對:
getField方法: 使用getField方法按鍵存取特定值。
<code> df.select($"a_map".getField("foo")).show</code>
Hive方括號語法: 使用Hive風格的方括號按鍵存取值。
<code> sqlContext.sql("SELECT a_map['foz'] FROM df").show</code>
完整路徑語法: 使用點語法按鍵存取值。
<code> df.select($"a_map.foo").show</code>
要存取結構體內的欄位:
點語法: 使用點語法檢索結構體的欄位。
<code> df.select($"a_struct.x").show</code>
巢狀陣列: 可以結合使用點語法和getItem方法存取結構體陣列中的欄位。
<code> df.select($"an_array_of_structs.foo").show</code>
UDT: 可以使用UDF存取使用者定義類型(UDT)的欄位。
以上是如何在 Spark SQL DataFrame 中有效查詢巢狀列(映射、陣列、結構)?的詳細內容。更多資訊請關注PHP中文網其他相關文章!