亚洲精品久久久久久第一页-人妻少妇精彩视品一区二区三区-91国产自拍免费视频-免费一级a在线播放视频正片-少妇天天日天天射天天爽-国产大屁股喷水视频在线观看-操美女骚穴抽插性爱视频-亚洲 欧美 中文字幕 丝袜-成人免费无码片在线观看

spark處理超大文件方法 spark讀取hdfs文件規(guī)則( 三 )


寬表
列數(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)容,希望對您有所幫助: