寬表
列數(shù)太多的表就是寬表 。比如我見過的最寬的表是1W列的 , 尤其在機器學習系統(tǒng)中 , 由于要抽取高維特征 , 所以在ETL階段經(jīng)常會把很多的表拼接成一個很大的寬表 。這種寬表是數(shù)據(jù)可視化的天敵 , 比如我們的功能是可以隨機預(yù)覽一份數(shù)據(jù)的100行 。那100*1W這樣的數(shù)據(jù)量要傳輸?shù)角岸瞬秩揪褪莻€很費事的操作了 。尤其是預(yù)覽本身也是要執(zhí)行一些計算的 。如果加上這份數(shù)據(jù)本來就有海量分片的話 , 要在后臺打開這么多的文件 , 再加上讀取這么寬的表的數(shù)據(jù) 。甚至有可能OOM , 實際上我也確實見過因為這個原因OOM的 。所以這個測試點就是我們故意去造這樣的寬表進行測試 。
其他的數(shù)據(jù)類型不一一解釋了 , 都跟字面的意思差不多 。
造數(shù)
之所以也使用spark這種分布式框架來造數(shù) , 而不是單獨使用parquet或者hdfs的client是因為我們造的數(shù)據(jù)除了要符合一些極端場景外 , 也要保證要有足夠的數(shù)據(jù)量 , 畢竟ETL都是面對大數(shù)據(jù)場景的 。所以利用spark的分布式計算的優(yōu)勢可以在短時間內(nèi)創(chuàng)建大量數(shù)據(jù) 。比如我前兩天造過一個1億行 , 60個G的數(shù)據(jù) , 只用了20分鐘 。
技術(shù)細節(jié)
RDD是spark的分布式數(shù)據(jù)結(jié)構(gòu) 。一份數(shù)據(jù)被spark讀取后會就生成一個RDD , 當然RDD就包含了那些partition 。我們創(chuàng)建RDD的方式有兩種 , 一種是從一個已有的文件中讀取RDD , 當然這不是我們想要的效果 。所以我們使用第二種 , 從內(nèi)存中的一個List中生成RDD 。如下:
public class Demo {
public static void main(String[] args) {
SparkConf conf = new SparkConf().setAppName(“data produce”)
.setMaster(“l(fā)ocal”);
JavaSparkContext sc = new JavaSparkContext(conf);
SparkSession spark = SparkSession
.builder()
.appName(“Java Spark SQL basic example”)
.getOrCreate();
List data = https://www.520longzhigu.com/shenghuo/new XRange(1000);
JavaRDD distData = https://www.520longzhigu.com/shenghuo/sc.parallelize(data, 100);
上面是我寫的一個demo , 前面初始化spark conf和spark session的代碼可以先忽略不用管 。主要看最后兩行 , XRange是我仿照python的xrange設(shè)計的類 ??梢詭臀矣妙愃粕善鞯脑韯?chuàng)建一個帶有index序列的List 。其實這里我們手動創(chuàng)建一個list也行 。而最后一行就是我們通過spark的API把一個List轉(zhuǎn)換成一個RDD 。sc.parallelize的第一個參數(shù)是List , 而第二個參數(shù)就是你要設(shè)置的并行度 , 也可以理解為你要生成這個數(shù)據(jù)的partition的數(shù)量 。其實如果我們現(xiàn)在想生成這一千行的只有index的數(shù)據(jù)的話 , 再調(diào)用這樣一個API就可以了:distData.saveAsTextFile(“path”); 通過這樣一個API就可以直接保存文件了 。當然這樣肯定不是我們想要的 , 因為里面還沒有我們要的數(shù)據(jù) 。所以這個時候我們要出動spark的一個高級接口 , dataframe 。dataframe是spark仿照pandas的dataframe的設(shè)計開發(fā)的高級API 。功能跟pandas很像 , 我們可以把一個dataframe就當做一個表來看 , 而它也有很多好用的API 。最重要的是我們有一個DataframeWriter類專門用來將dataframe保存成各種各樣格式和分區(qū)的數(shù)據(jù)的 。比如可以很方便的保存為scv , txt這種傳統(tǒng)數(shù)據(jù) , 可以很方便保存成parquet和orc這種列式存儲的文件格式 。也提供partition by的操作來保存成分區(qū)表或者是分桶表 ??傊軌驇臀覀冊斐龈鞣N我們需要的數(shù)據(jù) 。那么我們?nèi)绾伟岩粋€RDD轉(zhuǎn)換成我們需要的dataframe并填充進我們需要的數(shù)據(jù)呢 。往下看:
以上關(guān)于本文的內(nèi)容,僅作參考!溫馨提示:如遇健康、疾病相關(guān)的問題,請您及時就醫(yī)或請專業(yè)人士給予相關(guān)指導!
「愛刨根生活網(wǎng)」www.malaban59.cn小編還為您精選了以下內(nèi)容,希望對您有所幫助:- 男人如何處理婆媳關(guān)系 聰明男人處理婆媳關(guān)系
- 目前最好的cpu排名 電腦cpu處理器最新排名
- iphone手機丟失解決措施 蘋果手機被盜怎么找回處理
- 該如何處理婆媳關(guān)系 怎么解決婆媳關(guān)系
- 老婆出軌了該怎么處理才是最好的 出軌的婚姻能撐多久
- 老婆外遇怎樣處理 怎樣處理老婆出軌的情況
- ?老公外遇怎么處理 老公有外遇怎么辦
- 老公出軌后的真實心理 男人出軌后女人錯誤的處理方法
- 二婚夫妻怎么處理財務(wù)問題 二婚夫妻誰管錢好
- ubuntu上不了網(wǎng)處理方法 ubuntu上不了網(wǎng)怎么辦
