Spark SQL操作JSON欄位的小技巧

2022-09-26 13:00:40 字數 1357 閱讀 4734

前言

介紹spark sql的json支援,這是我們在databricks中開發的乙個功能,可以在spark中更容易查詢和建立json資料。隨著網路程式設計客棧和移動應用程式的普及,json已經成為web服務api以及長期儲存的常用的交換格式。使用現有的工具,使用者通常會使用複雜的管道來在分析系統中讀取和寫入json資料集。在apache spark 1.1中發布spark s的json支援,在apache spark 1.2中增強,極大地簡化了使用json資料的端到端體驗。

很多時候,比如用structure streaming消費kafka資料,預設可能是得到key,value欄位,key是偏移量,value是乙個byte陣列。很可能value其實是乙個json字串。這個時候我們該如何用sql操作這程式設計客棧個json裡的東西呢?另外,如果我處理完的資料,我想寫入到kafka,但是我想把整條記錄作為json格式寫入到kafka,又該怎麼寫這個sql呢?

get_json_object

第乙個就是get_json_object,具體用法如下:

select get_json_object('','$.k') as k

需要給定get_json_object 乙個json欄位名(或者字串),然後通過類似jsonpath的方式去拿具體的值。

這個方法其實有點麻煩,如果要提取裡面的是程式設計客棧個字段,我就要寫是個類似的東西,很複雜。

from_json

具體用法如下:

select a.k from (

select from_json('','k string, v string',map("","")) as a

)這個方法可以給json定義乙個schema,這樣在使用時,就可以直接使用a.k這種方式了,會簡化很多。

to_json

該方法可以把對應字段轉化為json字串,比如:

select to_json(struct(*)) as value

可以把所有字段轉化為json字串,然後表示成value欄位,接著你就可以把value欄位寫入kafka了。是不是很簡單。

處理具有大量欄位的json資料集

json資料通常是半結構化、非固定結構的。將來,我們將擴充套件spark sql對json支援,以處理資料集中的每個物件可能具有相當不同的結構的情況。例如,考慮使用json欄位來儲存表示http標頭的鍵/值對的資料集。每個記錄可能會引入新的標題型別,並為每個記錄使用乙個不同的列將產生乙個非常寬的模式。我們計畫支援自動檢測這種情況,而是使用map型別。因此,每行可以包含map,使得能夠查詢其鍵/值對。這樣,spark sql將處理具有更少結構的json資料集,推動了基於sql的系統可以處理的那程式設計客棧種查詢的邊界。

總結本文標題: spark sql操作json欄位的小技巧

本文位址:

Spark SQL 常用操作

packagesqltext importorg.apache.spark.importorg.apache.spark.sql.sqlcontext importorg.apache.spark.sql.dataframe importorg.apache.spark.sql.types.impo...

spark sql 入門操作

開始from pyspark.sql import sparksession spark sparksession builder config spark.some.config.option some value getorcreate 建立dataframe spark is an exist...

Spark SQL操作Hive實戰

在目前企業級 spark大資料開發中,大多數情況下都是採用hive來作為資料倉儲的。spark提供了對hive的支援,spark通過hivecontext可以直接操作hive中的資料。基於hivecontext,我們可以使用sql hql兩種方式來編寫sql語句 對hive進行操作,包括 建立表 刪...