自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Java 結(jié)構(gòu)化數(shù)據(jù)處理開源庫(kù) SPL

開發(fā) 后端
如果我們?cè)贘ava中也提供有一套完整的結(jié)構(gòu)化數(shù)據(jù)處理和計(jì)算類庫(kù),那這個(gè)問(wèn)題就能得到解決:即享受到架構(gòu)的優(yōu)勢(shì),又不致于降低開發(fā)效率。

[[442792]]

 現(xiàn)代Java應(yīng)用架構(gòu)越來(lái)越強(qiáng)調(diào)數(shù)據(jù)存儲(chǔ)和處理分離,以獲得更好的可維護(hù)性、可擴(kuò)展性以及可移植性,比如火熱的微服務(wù)就是一種典型。這種架構(gòu)通常要求業(yè)務(wù)邏輯要在Java程序中實(shí)現(xiàn),而不是像傳統(tǒng)應(yīng)用架構(gòu)中放在數(shù)據(jù)庫(kù)中。

應(yīng)用中的業(yè)務(wù)邏輯大都會(huì)涉及結(jié)構(gòu)化數(shù)據(jù)處理。數(shù)據(jù)庫(kù)(SQL)中對(duì)這類任務(wù)有較豐富的支持,可以相對(duì)簡(jiǎn)易地實(shí)現(xiàn)業(yè)務(wù)邏輯。但Java卻一直缺乏這類基礎(chǔ)支持,導(dǎo)致用Java實(shí)現(xiàn)業(yè)務(wù)邏輯非常繁瑣低效。結(jié)果,雖然架構(gòu)上有各種優(yōu)勢(shì),但開發(fā)效率卻反而大幅下降了。

如果我們?cè)贘ava中也提供有一套完整的結(jié)構(gòu)化數(shù)據(jù)處理和計(jì)算類庫(kù),那這個(gè)問(wèn)題就能得到解決:即享受到架構(gòu)的優(yōu)勢(shì),又不致于降低開發(fā)效率。

需要什么樣的能力?

Java下理想的結(jié)構(gòu)化數(shù)據(jù)處理類庫(kù)應(yīng)當(dāng)具備哪些特征呢?我們可以從SQL來(lái)總結(jié):

1. 集合運(yùn)算能力

結(jié)構(gòu)化數(shù)據(jù)經(jīng)常是批量(以集合形式)出現(xiàn)的,為了方便地計(jì)算這類數(shù)據(jù),有必要提供足夠的集合運(yùn)算能力。

如果沒有集合運(yùn)算類庫(kù),只有數(shù)組(相當(dāng)于集合)這種基礎(chǔ)數(shù)據(jù)類型,我們要對(duì)集合成員做個(gè)簡(jiǎn)單地求和也需要寫四五行循環(huán)語(yǔ)句才能完成,過(guò)濾、分組聚合等運(yùn)算則要寫出數(shù)百行代碼了。

SQL提供有較豐富的集合運(yùn)算,如 SUM/COUNT 等聚合運(yùn)算,WHERE 用于過(guò)濾、GROUP 用于分組,也支持針對(duì)集合的交、并、差等基本運(yùn)算。這樣寫出來(lái)的代碼就會(huì)短小很多。

2. Lambda語(yǔ)法

有了集合運(yùn)算能力是否就夠了呢?假如我們?yōu)?Java 開發(fā)一批的集合運(yùn)算類庫(kù),是否就可以達(dá)到 SQL 的效果呢?

沒有這么簡(jiǎn)單!

以過(guò)濾運(yùn)算為例。過(guò)濾通常需要一個(gè)條件,把滿足條件的集合成員保留。在 SQL 中這個(gè)條件是以一個(gè)表達(dá)式形式出現(xiàn)的,比如寫 WHERE x>0,就表示保留那些使得 x>0 計(jì)算結(jié)果為真的成員。這個(gè)表達(dá)式 x>0 并不是在執(zhí)行這個(gè)語(yǔ)句之前先計(jì)算好的,而是在遍歷時(shí)針對(duì)每個(gè)集合成員計(jì)算的。本質(zhì)上,這個(gè)表達(dá)式本質(zhì)上是一個(gè)函數(shù),是一個(gè)以當(dāng)前集合成員為參數(shù)的函數(shù)。對(duì)于 WHERE 運(yùn)算而言,相當(dāng)于把一個(gè)用表達(dá)式定義的函數(shù)用作了 WHERE 的參數(shù)。

這種寫法有一個(gè)術(shù)語(yǔ)叫做 Lambda 語(yǔ)法,或者叫函數(shù)式語(yǔ)言。

如果沒有 Lambda 語(yǔ)法,我們就要經(jīng)常臨時(shí)定義函數(shù),代碼會(huì)非常繁瑣,還容易發(fā)生名字沖突。

SQL中大量使用了 Lambda 語(yǔ)法,不在于必須過(guò)濾、分組運(yùn)算中,在計(jì)算列等不必須的場(chǎng)景也可以使用,大大簡(jiǎn)化了代碼。

3. 在 Lambda 語(yǔ)法中直接引用字段

結(jié)構(gòu)化數(shù)據(jù)并非簡(jiǎn)單的單值,而是帶有字段的記錄。

我們發(fā)現(xiàn),SQL 的表達(dá)式參數(shù)中引用記錄字段時(shí),大多數(shù)情況可以直接使用字段名稱而不必指明字段所屬的記錄,只有在多個(gè)同名字段時(shí)才需要冠以表名(或別名)以區(qū)分。

新版本的 Java 雖然也開始支持 Lambda 語(yǔ)法了,但只能把當(dāng)前記錄作為參數(shù)傳入這個(gè)用 Lambda 語(yǔ)法定義的函數(shù),然后再寫計(jì)算式時(shí)就總要帶上這個(gè)記錄。比如用單價(jià)和數(shù)量計(jì)算金額時(shí),如果用于表示當(dāng)前成員的參數(shù)名為 x,則需要寫成“x. 單價(jià) *x. 數(shù)量”這種啰嗦的形式。而在 SQL 中可以更為直觀地寫成 " 單價(jià) * 數(shù)量”。

4. 動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)

SQL還能很好地支持動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)。

結(jié)構(gòu)化數(shù)據(jù)計(jì)算中,返回值經(jīng)常也是有結(jié)構(gòu)的數(shù)據(jù),而結(jié)果數(shù)據(jù)結(jié)構(gòu)和運(yùn)算相關(guān),沒辦法在代碼編寫之前就先準(zhǔn)備好。所以需要支持動(dòng)態(tài)的數(shù)據(jù)結(jié)構(gòu)能力。

SQL中任何一個(gè) SELECT 語(yǔ)句都會(huì)產(chǎn)生一個(gè)新的數(shù)據(jù)結(jié)構(gòu),在代碼中可以隨意添加刪除字段,而不必事先定義結(jié)構(gòu)(類)。Java 這類語(yǔ)言則不行,在代碼編譯階段就要把用到的結(jié)構(gòu)(類)都定義好,原則上不能在執(zhí)行過(guò)程中動(dòng)態(tài)產(chǎn)生新的結(jié)構(gòu)。

5. 解釋型語(yǔ)言

從前面幾條的分析,我們已經(jīng)可以得到結(jié)論:Java 本身并不適合用作結(jié)構(gòu)化數(shù)據(jù)處理的語(yǔ)言。它的 Lambda 機(jī)制不支持特征 3,而且作為編譯型語(yǔ)言,也不能實(shí)現(xiàn)特征 4。

其實(shí),前面說(shuō)到的 Lambda 語(yǔ)法也不太適合采用編譯型語(yǔ)言來(lái)實(shí)現(xiàn)。編譯器不能確定這個(gè)寫到參數(shù)位置的表達(dá)式是應(yīng)該當(dāng)場(chǎng)計(jì)算出表達(dá)式的值再傳遞,還是把整個(gè)表達(dá)式編譯成一個(gè)函數(shù)傳遞,需要再設(shè)計(jì)更多的語(yǔ)法符號(hào)加以區(qū)分。而解釋型語(yǔ)言則沒有這個(gè)問(wèn)題,作為參數(shù)的表達(dá)式是先計(jì)算還是遍歷集合成員時(shí)再計(jì)算,可以由函數(shù)本身來(lái)決定。

SQL確實(shí)是解釋型語(yǔ)言。

引入SPL

Stream是Java8以官方身份推出的結(jié)構(gòu)化數(shù)據(jù)處理類庫(kù),但并不符合上述的要求。它沒有專業(yè)的結(jié)構(gòu)化數(shù)據(jù)類型,缺乏很多重要的結(jié)構(gòu)化數(shù)據(jù)計(jì)算函數(shù),不是解釋型語(yǔ)言,不支持動(dòng)態(tài)數(shù)據(jù)類型,Lambda語(yǔ)法的接口復(fù)雜。

Kotlin屬于Java生態(tài)系統(tǒng)的一部分,它在Stream的基礎(chǔ)上進(jìn)行了小幅改進(jìn),也提供了結(jié)構(gòu)化數(shù)據(jù)計(jì)算類型,但因?yàn)榻Y(jié)構(gòu)化數(shù)據(jù)計(jì)算函數(shù)不足,不是解釋型語(yǔ)言,不支持動(dòng)態(tài)數(shù)據(jù)類型,Lambda語(yǔ)法的接口復(fù)雜,仍然不是理想的結(jié)構(gòu)化數(shù)據(jù)計(jì)算類庫(kù)。

Scala提供了較豐富的結(jié)構(gòu)化數(shù)據(jù)計(jì)算函數(shù),但編譯型語(yǔ)言的特點(diǎn),也使它不能成為理想的結(jié)構(gòu)化數(shù)據(jù)計(jì)算類庫(kù)。

那么,Java生態(tài)下還有什么可以用呢?

集算器SPL。

SPL是由Java解釋執(zhí)行的程序語(yǔ)言,具備豐富的結(jié)構(gòu)化數(shù)據(jù)計(jì)算類庫(kù)、接口簡(jiǎn)單的Lambda語(yǔ)法和方便易用的動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu),是Java下理想的結(jié)構(gòu)化處理類庫(kù)。

豐富的集合運(yùn)算函數(shù)

SPL提供了專業(yè)的結(jié)構(gòu)化數(shù)據(jù)類型,即序表。和SQL的數(shù)據(jù)表一樣,序表是批量記錄組成的集合,具有結(jié)構(gòu)化數(shù)據(jù)類型的一般功能,下面舉例說(shuō)明。

解析源數(shù)據(jù)并生成序表:

Orders=T("d:/Orders.csv")

按列名從原序表生成新的序表:

Orders.new(OrderID, Amount, OrderDate)

計(jì)算列:

Orders.new(OrderID, Amount, year(OrderDate))

字段改名:

Orders.new(OrderID:ID, SellerId, year(OrderDate):y)

按序號(hào)使用字段:

Orders.groups(year(_5),_2; sum(_4))

序表改名(左關(guān)聯(lián))

join@1(Orders:o,SellerId ; Employees:e,EId).groups(e.Dept; sum(o.Amount))

序表支持所有的結(jié)構(gòu)化計(jì)算函數(shù),計(jì)算結(jié)果也同樣是序表,而不是Map之類的數(shù)據(jù)類型。比如對(duì)分組匯總的結(jié)果,繼續(xù)進(jìn)行結(jié)構(gòu)化數(shù)據(jù)處理:

Orders.groups(year(OrderDate):y; sum(Amount):m).new(y:OrderYear, m*0.2:discount)

在序表的基礎(chǔ)上,SPL提供了豐富的結(jié)構(gòu)化數(shù)據(jù)計(jì)算函數(shù),比如過(guò)濾、排序、分組、去重、改名、計(jì)算列、關(guān)聯(lián)、子查詢、集合計(jì)算、有序計(jì)算等。這些函數(shù)具有強(qiáng)大的計(jì)算能力,無(wú)須硬編碼輔助,就能獨(dú)立完成計(jì)算:

組合查詢:

Orders.select(Amount>1000 && Amount<=3000 && like(Client,"*bro*"))

排序:

Orders.sort(-Client,Amount)

分組匯總:

Orders.groups(year(OrderDate),Client; sum(Amount))

內(nèi)關(guān)聯(lián):

join(Orders:o,SellerId ; Employees:e,EId).groups(e.Dept; sum(o.Amount))

簡(jiǎn)潔的Lambda語(yǔ)法

SPL支持接口簡(jiǎn)單的Lambda語(yǔ)法,無(wú)須定義函數(shù)名和函數(shù)體,可以直接用表達(dá)式當(dāng)作函數(shù)的參數(shù),比如過(guò)濾:

Orders.select(Amount>1000)

修改業(yè)務(wù)邏輯時(shí),也不用重構(gòu)函數(shù),只須簡(jiǎn)單修改表達(dá)式:

Orders.select(Amount>1000 && Amount<2000)

SPL是解釋型語(yǔ)言,使用參數(shù)表達(dá)式時(shí)不必明確定義參數(shù)類型,使Lambda接口更簡(jiǎn)單。比如計(jì)算平方和,想在sum的過(guò)程中算平方,可以直觀寫作:

Orders.sum(Amount*Amount)

和SQL類似,SPL語(yǔ)法也支持在單表計(jì)算時(shí)直接使用字段名:

Orders.sort(-Client, Amount)

動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)

SPL是解釋型語(yǔ)言,天然支持動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu),可以根據(jù)計(jì)算結(jié)果結(jié)構(gòu)動(dòng)態(tài)生成新序表。特別適合計(jì)算列、分組匯總、關(guān)聯(lián)這類計(jì)算,比如直接對(duì)分組匯總的結(jié)果再計(jì)算:

Orders.groups(Client;sum(Amount):amt).select(amt>1000 && like(Client,"*S*"))

或直接對(duì)關(guān)聯(lián)計(jì)算的結(jié)果再計(jì)算:

join(Orders:o,SellerId ; Employees:e,Eid).groups(e.Dept; sum(o.Amount))

較復(fù)雜的計(jì)算通常都要拆成多個(gè)步驟,每個(gè)中間結(jié)果的數(shù)據(jù)結(jié)構(gòu)幾乎都不同。SPL支持動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu),不必先定義這些中間結(jié)果的結(jié)構(gòu)。比如,根據(jù)某年的客戶回款記錄表,計(jì)算每個(gè)月的回款額都在前10名的客戶:

Sales2021.group(month(sellDate)).(~.groups(Client;sum(Amount):sumValue)).(~.sort(-sumValue)) .(~.select(#<=10)).(~.(Client)).isect()

直接執(zhí)行SQL

SPL中還實(shí)現(xiàn)了SQL的解釋器,可以直接執(zhí)行SQL,從基本的WHERE、GROUP到JOIN、甚至WITH都能支持: 

  1. $select * from d:/Orders.csv where (OrderDate<date('2020-01-01') and Amount<=100)or (OrderDate>=date('2020-12-31') and Amount>100)  
  1. $select year(OrderDate),Client ,sum(Amount),count(1) from d:/Orders.csv  
  2. group by year(OrderDate),Client  
  3. having sum(Amount)<=100  
  1. $select o.OrderId,o.Client,e.Name e.Dept from d:/Orders.csv o  
  2. join d:/Employees.csv e on o.SellerId=e.Eid  
  1. $with t as (select Client ,sum(amount) s from d:/Orders.csv group by Client)  
  2. select t.Client, t.s, ct.Name, ct.address from t  
  3. left join ClientTable ct on t.Client=ct.Client 

更多語(yǔ)言優(yōu)勢(shì)

作為專業(yè)的結(jié)構(gòu)化數(shù)據(jù)處理語(yǔ)言,SPL不僅覆蓋了SQL的所有計(jì)算能力,在語(yǔ)言方面,還有更強(qiáng)大的優(yōu)勢(shì):

離散性及其支掛下的更徹底的集合化

集合化是SQL的基本特性,即支持?jǐn)?shù)據(jù)以集合的形式參與運(yùn)算。但SQL的離散性很不好,所有集合成員必須作為一個(gè)整體參于運(yùn)算,不能游離在集合之外。而Java等高級(jí)語(yǔ)言則支持很好的離散性,數(shù)組成員可以單獨(dú)運(yùn)算。

但是,更徹底的集合化需要離散性來(lái)支持,集合成員可以游離在集合之外,并與其它數(shù)據(jù)隨意構(gòu)成新的集合參與運(yùn)算 。

SPL兼具了SQL的集合化和Java的離散性,從而可以實(shí)現(xiàn)更徹底的集合化。

比如,SPL中很容易表達(dá)“集合的集合”,適合分組后計(jì)算。比如,找到各科成績(jī)均在前10名的學(xué)生:

  A
1 =T("score.csv").group(subject)
2 =A2.(~.rank(score).pselect@a(~<=10))
3 =A1.(~(A3(#)).(name)).isect()

SPL序表的字段可以存儲(chǔ)記錄或記錄集合,這樣可以用對(duì)象引用的方式,直觀地表達(dá)關(guān)聯(lián)關(guān)系,即使關(guān)系再多,也能直觀地表達(dá)。比如,根據(jù)員工表找到女經(jīng)理下屬的男員工:

Employees.select(性別:"男",部門.經(jīng)理.性別:"女")

有序計(jì)算是離散性和集合化的典型結(jié)合產(chǎn)物,成員的次序在集合中才有意義,這要求集合化,有序計(jì)算時(shí)又要將每個(gè)成員與相鄰成員區(qū)分開,會(huì)強(qiáng)調(diào)離散性。SPL兼具集合化和離散性,天然支持有序計(jì)算。

具體來(lái)說(shuō),SPL可以按絕對(duì)位置引用成員,比如,取第3條訂單可以寫成Orders(3),取第1、3、5條記錄可以寫成Orders([1,3,5])。

SPL也可以按相對(duì)位置引用成員,比如,計(jì)算每條記錄相對(duì)于上一條記錄的金額增長(zhǎng)率:Orders.derive(amount/amount[-1]-1)

SPL還可以用#代表當(dāng)前記錄的序號(hào),比如把員工按序號(hào)分成兩組,奇數(shù)序號(hào)一組,偶數(shù)序號(hào)一組:Employees.group(#%2==1)

更方便的函數(shù)語(yǔ)法

大量功能強(qiáng)大的結(jié)構(gòu)化數(shù)據(jù)計(jì)算函數(shù),這本來(lái)是一件好事,但這會(huì)讓相似功能的函數(shù)不容易區(qū)分。無(wú)形中提高了學(xué)習(xí)難度。

SPL提供了特有的函數(shù)選項(xiàng)語(yǔ)法,功能相似的函數(shù)可以共用一個(gè)函數(shù)名,只用函數(shù)選項(xiàng)區(qū)分差別。比如select函數(shù)的基本功能是過(guò)濾,如果只過(guò)濾出符合條件的第1條記錄,只須使用選項(xiàng)@1:

Orders.select@1(Amount>1000)

數(shù)據(jù)量較大時(shí),用并行計(jì)算提高性能,只須改為選項(xiàng)@m:

Orders.select@m(Amount>1000)

對(duì)排序過(guò)的數(shù)據(jù),用二分法進(jìn)行快速過(guò)濾,可用@b:

Orders.select@b(Amount>1000)

函數(shù)選項(xiàng)還可以組合搭配,比如:

Orders.select@1b(Amount>1000)

結(jié)構(gòu)化運(yùn)算函數(shù)的參數(shù)常常很復(fù)雜,比如SQL就需要用各種關(guān)鍵字把一條語(yǔ)句的參數(shù)分隔成多個(gè)組,但這會(huì)動(dòng)用很多關(guān)鍵字,也使語(yǔ)句結(jié)構(gòu)不統(tǒng)一。

SPL支持層次參數(shù),通過(guò)分號(hào)、逗號(hào)、冒號(hào)自高而低將參數(shù)分為三層,用通用的方式簡(jiǎn)化復(fù)雜參數(shù)的表達(dá):

join(Orders:o,SellerId ; Employees:e,EId)

擴(kuò)展的Lambda語(yǔ)法

普通的Lambda語(yǔ)法不僅要指明表達(dá)式(即函數(shù)形式的參數(shù)),還必須完整地定義表達(dá)式本身的參數(shù),否則在數(shù)學(xué)形式上不夠嚴(yán)密,這就讓Lambda語(yǔ)法很繁瑣。比如用循環(huán)函數(shù)select過(guò)濾集合A,只保留值為偶數(shù)的成員,一般形式是:

A.select(f(x):{x%2==0} )

這里的表達(dá)式是x%2==0,表達(dá)式的參數(shù)是f(x)里的x,x代表集合A里的成員,即循環(huán)變量。

SPL用固定符號(hào)~代表循環(huán)變量,當(dāng)參數(shù)是循環(huán)變量時(shí)就無(wú)須再定義參數(shù)了。在SPL中,上面的Lambda語(yǔ)法可以簡(jiǎn)寫作:A.select(~ %2==0)

普通Lambda語(yǔ)法必須定義表達(dá)式用到的每一個(gè)參數(shù),除了循環(huán)變量外,常用的參數(shù)還有循環(huán)計(jì)數(shù),如果把循環(huán)計(jì)數(shù)也定義到Lambda中,代碼就更繁瑣了。

SPL用固定符號(hào)#代表循環(huán)變量。比如,用函數(shù)select過(guò)濾集合A,只保留序號(hào)是偶數(shù)的成員,SPL可以寫作:A.select(# %2==0)

相對(duì)位置經(jīng)常出現(xiàn)在難度較大的計(jì)算中,而且相對(duì)位置本身就很難計(jì)算,當(dāng)要使用相對(duì)位置時(shí),參數(shù)的寫法將非常繁瑣。

SPL用固定形式[序號(hào)]代表相對(duì)位置:

  A B
1 =T("Orders.txt") /訂單序表
2 =A1.groups(year(Date):y,month(Date):m;   sum(Amount):amt) /按年月分組匯總
3 =A2.derive(amt/amt[-1]:lrr, amt[-1:1].avg():ma) /計(jì)算比上期和移動(dòng)平均

無(wú)縫集成、低耦合、熱切換

作為用Java解釋的腳本語(yǔ)言,SPL提供了JDBC驅(qū)動(dòng),可以無(wú)縫集成進(jìn)Java應(yīng)用程中。

簡(jiǎn)單語(yǔ)句可以像SQL一樣直接執(zhí)行: 

  1. …  
  2. Class.forName("com.esproc.jdbc.InternalDriver");  
  3. Connection conn =DriverManager.getConnection("jdbc:esproc:local://");  
  4. PrepareStatement st = conn.prepareStatement("=T(\"D:/Orders.txt\").select(Amount>1000 && Amount<=3000 && like(Client,\"*S*\"))");  
  5. ResultSet result=st.execute();  
  6. ... 

復(fù)雜計(jì)算可以存成腳本文件,以存儲(chǔ)過(guò)程方式調(diào)用 

  1. …  
  2. Class.forName("com.esproc.jdbc.InternalDriver");  
  3. Connection conn =DriverManager.getConnection("jdbc:esproc:local://");  
  4. Statement st = connection.();  
  5. CallableStatement st = conn.prepareCall("{call splscript1(?, ?)}");  
  6. st.setObject(1, 3000);  
  7. st.setObject(2, 5000);   
  8. ResultSet result=st.execute();  
  9. ... 

將腳本外置于Java程序,一方面可以降低代碼耦合性,另一方面利用解釋執(zhí)行的特點(diǎn)還可以支持熱切換,業(yè)務(wù)邏輯變動(dòng)時(shí)只要修改腳本即可立即生效,不像使用Java時(shí)常常要重啟整個(gè)應(yīng)用。這種機(jī)制特別適合編寫微服務(wù)架構(gòu)中的業(yè)務(wù)處理邏輯。 

 

責(zé)任編輯:龐桂玉 來(lái)源: Java知音
相關(guān)推薦

2022-05-24 09:52:37

Spark SQL大數(shù)據(jù)處理Hive

2023-12-05 08:47:30

Pandas數(shù)據(jù)處理

2018-04-03 14:00:03

結(jié)構(gòu)化數(shù)據(jù)非結(jié)構(gòu)化數(shù)據(jù)數(shù)據(jù)庫(kù)

2019-07-13 15:00:17

結(jié)構(gòu)化SQLNOSQL數(shù)據(jù)庫(kù)

2021-12-12 08:37:18

結(jié)構(gòu)化數(shù)據(jù)非結(jié)構(gòu)化數(shù)據(jù)數(shù)據(jù)

2017-12-06 15:46:31

深度學(xué)習(xí)結(jié)構(gòu)化數(shù)據(jù)NLP

2024-05-27 00:32:45

2024-10-08 10:57:04

2021-02-03 09:34:28

潮數(shù)

2023-12-25 15:00:18

結(jié)構(gòu)化布線光纖

2011-05-25 15:16:55

非結(jié)構(gòu)化數(shù)據(jù)庫(kù)異構(gòu)數(shù)據(jù)庫(kù)

2023-01-06 08:00:00

關(guān)系數(shù)據(jù)庫(kù)數(shù)據(jù)庫(kù)機(jī)器學(xué)習(xí)

2009-02-02 09:05:08

GoogleWebWeb結(jié)構(gòu)化

2017-05-16 21:31:03

結(jié)構(gòu)化數(shù)據(jù)新模式

2015-12-08 13:53:56

java結(jié)構(gòu)對(duì)齊連接

2015-12-18 10:10:06

集算器Java結(jié)構(gòu)化

2015-12-04 10:26:31

java結(jié)構(gòu)化集合運(yùn)算

2023-03-29 21:06:53

數(shù)據(jù)中心

2014-03-14 09:52:15

非結(jié)構(gòu)化數(shù)據(jù)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)