Spark SQL操作JSON字段的小技巧
前言
介紹Spark SQL的JSON支持,這是我們在Databricks中開發(fā)的一個(gè)功能,可以在Spark中更容易查詢和創(chuàng)建JSON數(shù)據(jù)。隨著網(wǎng)絡(luò)和移動(dòng)應(yīng)用程序的普及,JSON已經(jīng)成為Web服務(wù)API以及長期存儲(chǔ)的常用的交換格式。使用現(xiàn)有的工具,用戶通常會(huì)使用復(fù)雜的管道來在分析系統(tǒng)中讀取和寫入JSON數(shù)據(jù)集。在Apache Spark 1.1中發(fā)布Spark SQL的JSON支持,在Apache Spark 1.2中增強(qiáng),極大地簡化了使用JSON數(shù)據(jù)的端到端體驗(yàn)。
很多時(shí)候,比如用structure streaming消費(fèi)kafka數(shù)據(jù),默認(rèn)可能是得到key,value字段,key是偏移量,value是一個(gè)byte數(shù)組。很可能value其實(shí)是一個(gè)Json字符串。這個(gè)時(shí)候我們該如何用SQL操作這個(gè)json里的東西呢?另外,如果我處理完的數(shù)據(jù),我想寫入到kafka,但是我想把整條記錄作為json格式寫入到Kafka,又該怎么寫這個(gè)SQL呢?
get_json_object
第一個(gè)就是get_json_object,具體用法如下:
select get_json_object('{"k": "foo", "v": 1.0}','$.k') as k
需要給定get_json_object 一個(gè)json字段名(或者字符串),然后通過類似jsonPath的方式去拿具體的值。
這個(gè)方法其實(shí)有點(diǎn)麻煩,如果要提取里面的是個(gè)字段,我就要寫是個(gè)類似的東西,很復(fù)雜。
from_json
具體用法如下:
select a.k from (
select from_json('{"k": "foo", "v": 1.0}','k STRING, v STRING',map("","")) as a
)
這個(gè)方法可以給json定義一個(gè)Schema,這樣在使用時(shí),就可以直接使用a.k這種方式了,會(huì)簡化很多。
to_json
該方法可以把對應(yīng)字段轉(zhuǎn)化為json字符串,比如:
select to_json(struct(*)) AS value
可以把所有字段轉(zhuǎn)化為json字符串,然后表示成value字段,接著你就可以把value字段寫入Kafka了。是不是很簡單。
處理具有大量字段的JSON數(shù)據(jù)集
JSON數(shù)據(jù)通常是半結(jié)構(gòu)化、非固定結(jié)構(gòu)的。將來,我們將擴(kuò)展Spark SQL對JSON支持,以處理數(shù)據(jù)集中的每個(gè)對象可能具有相當(dāng)不同的結(jié)構(gòu)的情況。例如,考慮使用JSON字段來保存表示HTTP標(biāo)頭的鍵/值對的數(shù)據(jù)集。每個(gè)記錄可能會(huì)引入新的標(biāo)題類型,并為每個(gè)記錄使用一個(gè)不同的列將產(chǎn)生一個(gè)非常寬的模式。我們計(jì)劃支持自動(dòng)檢測這種情況,而是使用map類型。因此,每行可以包含Map,使得能夠查詢其鍵/值對。這樣,Spark SQL將處理具有更少結(jié)構(gòu)的JSON數(shù)據(jù)集,推動(dòng)了基于SQL的系統(tǒng)可以處理的那種查詢的邊界。
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
相關(guān)文章
詳解IDEA中便捷內(nèi)存數(shù)據(jù)庫H2的最簡使用方式
這篇文章主要介紹了詳解IDEA中便捷內(nèi)存數(shù)據(jù)庫H2的最簡使用方式,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03
dbeaver導(dǎo)入導(dǎo)出數(shù)據(jù)庫簡單圖文教程
DBeaver是一款適用于開發(fā)人員、數(shù)據(jù)庫管理員和分析師的多平臺(tái)、多數(shù)據(jù)庫管理工具,這篇文章主要給大家介紹了關(guān)于dbeaver導(dǎo)入導(dǎo)出數(shù)據(jù)庫的相關(guān)資料,需要的朋友可以參考下2024-01-01
復(fù)雜SQL實(shí)現(xiàn)分組分情況分頁查詢代碼實(shí)例
最近學(xué)習(xí)了一下SQL的分頁查詢,總結(jié)了復(fù)雜SQL分組分頁查詢的方法,這篇文章主要給大家介紹了關(guān)于復(fù)雜SQL實(shí)現(xiàn)分組分情況分頁查詢的相關(guān)資料,需要的朋友可以參考下2023-12-12
在SQL SERVER中查詢數(shù)據(jù)庫中第幾條至第幾條之間的數(shù)據(jù)SQL語句寫法
這篇文章主要介紹了在SQL SERVER中查詢數(shù)據(jù)庫中第幾條至第幾條之間的數(shù)據(jù)SQL語句寫法,需要的朋友可以參考下2015-11-11
SQLSERVER 高級復(fù) 制 排錯(cuò) 技巧
SQLSERVER 高級復(fù) 制 排錯(cuò) 技巧...2007-08-08

