1. 「etl」是什麼
ETL,是英文Extract-Transform-Load的縮寫,用來描述將數據從來源端經過抽取(extract)、轉換(transform)、載入(load)至目的端的過程。ETL一詞較常用在數據倉庫,但其對象並不限於數據倉庫。
數據倉庫是為企業所有級別的決策制定過程,提供所有類型數據支持的戰略集合。它是單個數據存儲,出於分析性報告和決策支持目的而創建。 為需要業務智能的企業,提供指導業務流程改進、監視時間、成本、質量以及控制。
ETL是將業務系統的數據經過抽取、清洗轉換之後載入到數據倉庫的過程,目的是將企業中的分散、零亂、標准不統一的數據整合到一起,為企業的決策提供分析依據, ETL是BI(商業智能)項目重要的一個環節。
(1)數據可以通過哪些方式來完成裝載擴展閱讀:
ETL與ELT:
ETL所描述的過程,一般常見的作法包含ETL或是ELT(Extract-Load-Transform),並且混合使用。通常愈大量的數據、復雜的轉換邏輯、目的端為較強運算能力的資料庫,愈偏向使用ELT,以便運用目的端資料庫的平行處理能力。
ETL(orELT)的流程可以用任何的編程語言去開發完成,由於ETL是極為復雜的過程,而手寫程序不易管理,有愈來愈多的企業採用工具協助ETL的開發,並運用其內置的metadata功能來存儲來源與目的的對應(mapping)以及轉換規則。
工具可以提供較強大的連接功能(connectivity)來連接來源端及目的端,開發人員不用去熟悉各種相異的平台及數據的結構,亦能進行開發。當然,為了這些好處,付出的代價便是金錢。
2. 數據收集有哪些方法
數據收集的四種常見的方式包括問卷調查、查閱資料、實地考查、試驗,幾種方法各有各的又是和缺點,具體分析如下。
四是實驗。實驗設計數據是四種方法中最耗時間的一種,因為它是通過各種各樣的實驗來得到一個統一的方向,也就是說,在這個過程中,可能有無數次的失敗。但是實驗得到的數據是最准確的,而且可能會推動某個行業的進步。所以,實驗收集數據的優點是數據的准確性很高,而他的缺點就是未知性很大,不管實驗的周期還是實驗的結果都是不確定性的。
隨著科技的發展和大數據時代的到來,收集數據越來越容易,而大家也應該更注重於保護和利用數據。
3. Android中用什麼方法來存儲數據,最常的方式是什麼 像 QQ 微信的數據如何存儲的
Android應用開發中,給我們提供了5種數據的存儲方式
1 使用SharedPreferences存儲數據
2 文件存儲數據
3 SQLite資料庫存儲數據
4 使用ContentProvider存儲數據
5 網路存儲數據
不同的業務邏輯,或者需求,用不同的實現方式,以下是這幾中數據存儲方式的說明用及法:
第一種: 使用SharedPreferences存儲數據
SharedPreferences是Android平台上一個輕量級的存儲類,主要是保存一些常用的配置比如窗口狀態,
一般在Activity中 重載窗口狀態onSaveInstanceState保存一般使用SharedPreferences完成,
它提供了Android平台常規的Long長 整形、Int整形、String字元串型的保存。
SharedPreferences類似過去Windows系統上的ini配置文件,但是它分為多種許可權,
可以全局共享訪問,android123提示最終是以xml方式來保存,整體效率來看不是特別的高,
對於常規的輕量級而言比SQLite要好不少,如果真的存儲量不大可以考慮自己定義文件格式。
xml 處理時Dalvik會通過自帶底層的本地XML Parser解析,比如XMLpull方式,這樣對於內存資源佔用比較好。
它的本質是基於XML文件存儲key-value鍵值對數據,通常用來存儲一些簡單的配置信息。
其存儲位置在/data/data/< >/shared_prefs目錄下。
SharedPreferences對象本身只能獲取數據而不支持存儲和修改,存儲修改是通過Editor對象實現。
實現SharedPreferences存儲的步驟如下:
一、根據Context獲取SharedPreferences對象
二、利用edit()方法獲取Editor對象。
三、通過Editor對象存儲key-value鍵值對數據。
四、通過commit()方法提交數據。
下面是示例代碼:
public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//獲取SharedPreferences對象
Context ctx = MainActivity.this;
SharedPreferences sp = ctx.getSharedPreferences("SP", MODE_PRIVATE);
//存入數據
Editor editor = sp.edit();
editor.putString("STRING_KEY", "string");
editor.putInt("INT_KEY", 0);
editor.putBoolean("BOOLEAN_KEY", true);
editor.commit();
//返回STRING_KEY的值
Log.d("SP", sp.getString("STRING_KEY", "none"));
//如果NOT_EXIST不存在,則返回值為"none"
Log.d("SP", sp.getString("NOT_EXIST", "none"));
}
}
這段代碼執行過後,即在/data/data/com.test/shared_prefs目錄下生成了一個SP.xml文件,一個應用可以創建多個這樣的xml文件。
SharedPreferences對象與SQLite資料庫相比,免去了創建資料庫,創建表,寫SQL語句等諸多操作,相對而言更加方便,簡潔。
但是SharedPreferences也有其自身缺陷,比如其職能存儲boolean,int,float,long和String五種簡單的數據類型,比如其無法進行條件查詢等。
所以不論SharedPreferences的數據存儲操作是如何簡單,它也只能是存儲方式的一種補充,而無法完全替代如SQLite資料庫這樣的其他數據存儲方式。
第二種: 文件存儲數據
關於文件存儲,Activity提供了openFileOutput()方法可以用於把數據輸出到文件中,具體的實現過程與在J2SE環境中保存數據到文件中是一樣的。
文件可用來存放大量數據,如文本、圖片、音頻等。
默認位置:/data/data/< >/files/***.***。
代碼示例:
public void save(){
try {
FileOutputStream outStream=this.openFileOutput("a.txt",Context.MODE_WORLD_READABLE);
outStream.write(text.getText().toString().getBytes());
outStream.close();
Toast.makeText(MyActivity.this,"Saved",Toast.LENGTH_LONG).show();
} catch (FileNotFoundException e) {
return;
}
catch (IOException e){
return ;
}
}
openFileOutput()方法的第一參數用於指定文件名稱,不能包含路徑分隔符「/」 ,如果文件不存在,Android 會自動創建它。
創建的文件保存在/data/data//files目錄,如: /data/data/cn.itcast.action/files/itcast.txt ,
通過點擊Eclipse菜單「Window」-「Show View」-「Other」,在對話窗口中展開android文件夾,
選擇下面的File Explorer視圖,然後在File Explorer視圖中展開/data/data//files目錄就可以看到該文件。
openFileOutput()方法的第二參數用於指定操作模式,有四種模式,分別為:
Context.MODE_PRIVATE = 0
Context.MODE_APPEND = 32768
Context.MODE_WORLD_READABLE = 1
Context.MODE_WORLD_WRITEABLE = 2
Context.MODE_PRIVATE:為默認操作模式,代表該文件是私有數據,只能被應用本身訪問,在該模式下,寫入的內容會覆蓋原文件的內容,如果想把新寫入的內容追加到原文件中。可以使用Context.MODE_APPEND
Context.MODE_APPEND:模式會檢查文件是否存在,存在就往文件追加內容,否則就創建新文件。
Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE用來控制其他應用是否有許可權讀寫該文件。
MODE_WORLD_READABLE:表示當前文件可以被其他應用讀取;
MODE_WORLD_WRITEABLE:表示當前文件可以被其他應用寫入。
如果希望文件被其他應用讀和寫,可以傳入: openFileOutput("itcast.txt", Context.MODE_WORLD_READABLE + Context.MODE_WORLD_WRITEABLE); android有一套自己的安全模型,當應用程序(.apk)在安裝時系統就會分配給他一個userid,當該應用要去訪問其他資源比如文件的時候,就需要userid匹配。默認情況下,任何應用創建的文件,sharedpreferences,資料庫都應該是私有的(位於/data/data//files),其他程序無法訪問。
除非在創建時指定了Context.MODE_WORLD_READABLE或者Context.MODE_WORLD_WRITEABLE ,只有這樣其他程序才能正確訪問。
讀取文件示例:
public void load(){
try {
FileInputStream inStream=this.openFileInput("a.txt");
ByteArrayOutputStream stream=new ByteArrayOutputStream();
byte[] buffer=new byte[1024];
int length=-1;
while((length=inStream.read(buffer))!=-1) {
stream.write(buffer,0,length);
}
stream.close();
inStream.close();
text.setText(stream.toString());
Toast.makeText(MyActivity.this,"Loaded",Toast.LENGTH_LONG).show();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
catch (IOException e){
return ;
}
}
對於私有文件只能被創建該文件的應用訪問,
如果希望文件能被其他應用讀和寫,
可以在創建文件時,指定Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE許可權。
Activity還提供了getCacheDir()和getFilesDir()方法: g
etCacheDir()方法用於獲取/data/data//cache目錄 getFilesDir()方法用於獲取/data/data//files目錄。
把文件存入SDCard:
使用Activity的openFileOutput()方法保存文件,文件是存放在手機空間上,
一般手機的存儲空間不是很大,存放些小文件還行,如果要存放像視頻這樣的大文件,是不可行的。
對於像視頻這樣的大文件,我們可以把它存放在SDCard。
SDCard是干什麼的?你可以把它看作是移動硬碟或U盤。
在模擬器中使用SDCard,你需要先創建一張SDCard卡(當然不是真的SDCard,只是鏡像文件)。
創建SDCard可以在Eclipse創建模擬器時隨同創建,也可以使用DOS命令進行創建,
如下: 在Dos窗口中進入android SDK安裝路徑的tools目錄,
輸入以下命令創建一張容量為2G的SDCard,文件後綴可以隨便取,
建議使用.img: mksdcard 2048M D:\AndroidTool\sdcard.img 在程序中訪問SDCard,你需要申請訪問SDCard的許可權。
在AndroidManifest.xml中加入訪問SDCard的許可權如下:
<!-- 在SDCard中創建與刪除文件許可權 -->
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<!-- 往SDCard寫入數據許可權 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
要往SDCard存放文件,程序必須先判斷手機是否裝有SDCard,並且可以進行讀寫。
注意:訪問SDCard必須在AndroidManifest.xml中加入訪問SDCard的許可權。
if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
File sdCardDir = Environment.getExternalStorageDirectory();//獲取SDCard目錄
File saveFile = new File(sdCardDir, 「a.txt」);
FileOutputStream outStream = new FileOutputStream(saveFile);
outStream.write("test".getBytes());
outStream.close();
}
Environment.getExternalStorageState()方法用於獲取SDCard的狀態,如果手機裝有SDCard,並且可以進行讀寫,那麼方法返回的狀態等於Environment.MEDIA_MOUNTED。
Environment.getExternalStorageDirectory()方法用於獲取SDCard的目錄,當然要獲取SDCard的目錄,你也可以這樣寫:
File sdCardDir = new File("/sdcard"); //獲取SDCard目錄
File saveFile = new File(sdCardDir, "itcast.txt");
//上面兩句代碼可以合成一句:
File saveFile = new File("/sdcard/a.txt");
FileOutputStream outStream = new FileOutputStream(saveFile);
outStream.write("test".getBytes());
outStream.close();
第三種: SQLite資料庫存儲數據
SQLite是輕量級嵌入式資料庫引擎,它支持 SQL 語言,
並且只利用很少的內存就有很好的性能。
此外它還是開源的,任何人都可以使用它。
許多開源項目((Mozilla, PHP, Python)都使用了 SQLite
SQLite 由以下幾個組件組成:SQL 編譯器、內核、後端以及附件。
SQLite 通過利用虛擬機和虛擬資料庫引擎(VDBE),使調試、修改和擴展 SQLite 的內核變得更加方便。
特點:
面向資源有限的設備,
沒有伺服器進程,
所有數據存放在同一文件中跨平台,
可自由復制。
SQLite 基本上符合 SQL-92 標准,和其他的主要 SQL 資料庫沒什麼區別。它的優點就是高效,Android 運行時環境包含了完整的 SQLite。
SQLite 和其他資料庫最大的不同就是對數據類型的支持,創建一個表時,可以在 CREATE TABLE 語句中指定某列的數據類型,但是你可以把任何數據類型放入任何列中。當某個值插入資料庫時,SQLite 將檢查它的類型。如果該類型與關聯的列不匹配,則 SQLite 會嘗試將該值轉換成該列的類型。如果不能轉換,則該值將作為其本身具有的類型存儲。比如可以把一個字元串(String)放入 INTEGER 列。SQLite 稱這為「弱類型」(manifest typing.)。 此外,SQLite 不支持一些標準的 SQL 功能,特別是外鍵約束(FOREIGN KEY constrains),嵌套 transcaction 和 RIGHT OUTER JOIN 和 FULL OUTER JOIN, 還有一些 ALTER TABLE 功能。 除了上述功能外,SQLite 是一個完整的 SQL 系統,擁有完整的觸發器,交易等等。
Android 集成了 SQLite 資料庫 Android 在運行時(run-time)集成了 SQLite,所以每個 Android 應用程序都可以使用 SQLite 資料庫。
對於熟悉 SQL 的開發人員來時,在 Android 開發中使用 SQLite 相當簡單。但是,由於 JDBC 會消耗太多的系統資源,所以 JDBC 對於手機這種內存受限設備來說並不合適。因此,Android 提供了一些新的 API 來使用 SQLite 資料庫,Android 開發中,程序員需要學使用這些 API。
資料庫存儲在 data/< 項目文件夾 >/databases/ 下。 Android 開發中使用 SQLite 資料庫 Activites 可以通過 Content Provider 或者 Service 訪問一個資料庫。
下面會詳細講解如果創建資料庫,添加數據和查詢資料庫。 創建資料庫 Android 不自動提供資料庫。在 Android 應用程序中使用 SQLite,必須自己創建資料庫,然後創建表、索引,填充數據。
Android 提供了 SQLiteOpenHelper 幫助你創建一個資料庫,你只要繼承 SQLiteOpenHelper 類,就可以輕松的創建資料庫。SQLiteOpenHelper 類根據開發應用程序的需要,封裝了創建和更新資料庫使用的邏輯。
SQLiteOpenHelper 的子類,至少需要實現三個方法:
1 構造函數,調用父類 SQLiteOpenHelper 的構造函數。這個方法需要四個參數:上下文環境(例如,一個 Activity),資料庫名字,一個可選的游標工廠(通常是 Null),一個代表你正在使用的資料庫模型版本的整數。
2 onCreate()方法,它需要一個 SQLiteDatabase 對象作為參數,根據需要對這個對象填充表和初始化數據。
3 onUpgrage() 方法,它需要三個參數,一個 SQLiteDatabase 對象,一個舊的版本號和一個新的版本號,這樣你就可以清楚如何把一個資料庫從舊的模型轉變到新的模型。
第四種 使用ContentProvider存儲數據 ContentProvider其實也是通過資料庫的方式來存儲數據的,因此這里不再做詳細介紹
第五種 網路存儲數據 也就是說將數據保存在伺服器,android上只需要通過httpclient發起一個請求,向伺服器獲取數據即可
4. 數據裝載一般通過()英寸軟盤安裝
3.5英寸。數據裝載一般通過3.5英寸軟盤安裝。企業一直使用3.5英寸軟盤裝載導航資料庫。然而困搏,相比U盤等存儲設備,春尺余軟盤扒滾容量小、易損壞,已逐漸在市場上消失。伴隨公司隊規模的擴大,軟盤損壞的情況越來越多,其不穩定性也嚴重阻礙了導航資料庫的正常製作和裝載。
5. 數據採集的方法有哪些 數據採集的基本方法
1、數據採集根據採集數據的類型可以分為不同的方式,主要方式有:感測器採集、爬蟲、錄入、導入、介面等。
2、數據採集的基本方法:
(1)感測器監測數據:通過感測器,即現在應用比較廣的一個詞:物聯網。通過溫濕度感測器、氣體感測器、視頻感測器等外部硬體設備與系統進行通信,將感測器監測到的數據傳至系統中進行採集使用。
(2)第二種是新聞資訊類互聯網數據,可以通過編寫網路爬蟲,設置好數據源後進行有目標性的爬取數據。
(3)第三種通過使用系統錄入頁面將已有的數據錄入至系統中。
(4)第四種方式是針對已有的批量的結構化數據可以開發導入工具將其導入系統中。
(5)第五種方式,可以通過API介面將其他系統中的數據採集到本系統中。
6. 數據在計算機的存儲方式有哪幾種資料庫的主要功能是什麼有哪些主要的資料庫管理系統
數據在計算機中的存儲方式
數據有數值型和非數值型兩類,這些數據在計算機中都必須以二進制形式表示。一串二進制數既可表示數量值,也可表示一個字元、漢字或其他。一串二進制數代表的數據不同,含義也不同。這些數據在計算機的存儲設備中是如何進行組織存儲的?
數據單位
· 位(bit)
位(bit),音譯為「比特」,是計算機存儲設備的最小單位,由數字0或1組成。
· 位元組(Byte)
位元組(Byte),簡寫為「B」,音譯為「拜特」,簡寫為「B」。8個二進制位編為一組稱為一個位元組,即:1B = 8bit。位元組是計算機處理數據的基本單位,即以位元組為單位解釋信息。通常,一個ASCII碼佔1個位元組;一個漢字國標碼佔2個位元組;整數佔2個位元組;實數,即帶有小數點的數,用4個位元組組成浮點形式等。
· 字(word)
計算機一次存取、處理和傳輸的數據長度稱為字,即:一組二進制數碼作為一個整體來參加運算或處理的單位。一個字通常由一個或多個位元組構成,用來存放一條指令或一個數據。
· 字長
一個字中所包含的二進制數的位數稱為字長。不同的計算機,字長是不同的,常用的字長有8位、16位、32位和64位等,也就是經常說的8位機、16位機、32位機或64位機。例如,一台計算機如果用8個二進制位表示一個字,就說該機是八位機,或者說它的字長是8位的;又如,一個字由兩個位元組組成,即16個二進制位,則字長為16位。字長是衡量計算機性能的一個重要標志。字長越長,一次處理的數字位數越大,速度也就越快。
存儲設備
用來存儲信息的設備稱為計算機的存儲設備,如內存、硬碟、軟盤及光碟等。不論是哪一種設備,存儲設備的最小單位是「位」,存儲信息的單位是位元組,也就是說按位元組組織存放數據。
· 存儲單元
表示一個數據的總長度稱為計算機的存儲單元。在計算機中,當一個數據作為一個整體存入或取出時,這個數據存放在一個或幾個位元組中組成一個存儲單元。存儲單元的特點是,只有往存儲單元送新數據時,該存儲單元的內容用新值代替舊值,否則永遠保持原有數據。
· 存儲容量
某個存儲設備所能容納的二進制信息量的總和稱為存儲設備的存儲容量。存儲容量用位元組數來表示,如:4MB、2GB等,其關系為:1KB = 1024 B、1MB = 1024 KB、1GB = 1024 MB。1千位元組相當於210 Byte,即1024 Byte, 記為1KB;1兆位元組相當於220 Byte,即1024 KB,記為1MB;而1吉位元組相當於230 Byte ,即1024 MB,記為1GB。
內存容量是指為計算機系統所配置的主存(RAM)總位元組數,度量單位是「KB」「MB」,如32MB、64MB、128MB等。外存多以硬碟、軟盤和光碟為主,每個設備所能容納的信息量的總位元組數稱為外存容量,度量單位是「MB」「GB」,如800MB、6.5GB。
目前,高檔微型計算機的內存容量已從幾MB發展到幾百MB,外存容量已從幾百MB發展到幾GB~幾十GB。
編址與地址
· 編 址
對計算機存儲單元編號的過程稱為「編址」,是以位元組為單位進行的。
· 地 址
存儲單元的編號稱為地址。
注意:地址號與存儲單元是一一對應的,CPU通過單元地址訪問存儲單元中的信息,地址所對應的存儲單元中的信息是CPU操作的對象,即數據或指令本身。地址也是用二進制編碼表示,為便於識別通常採用16進制。
問題2
它所提供的功能有以下幾項:
(1)數據定義功能。DBMS提供相應數據語言來定義(DDL)資料庫結構,它們是刻畫資料庫框架,並被保存在數據字典中。
(2)數據存取功能。DBMS提供數據操縱語言(DML),實現對資料庫數據的基本存取操作:檢索,插入,修改和刪除。
(3)資料庫運行管理功能。DBMS提供數據控制功能,即是數據的安全性、完整性和並發控制等對資料庫運行進行有效地控制和管理,以確保數據正確有效。
(4)資料庫的建立和維護功能。包括資料庫初始數據的裝入,資料庫的轉儲、恢復、重組織,系統性能監視、分析等功能。
(5)資料庫的傳輸。DBMS提供處理數據的傳輸,實現用戶程序與DBMS之間的通信,通常與操作系統協調完成。
問題3
著名資料庫管理系統
MS SQL SYBASE DB2 ORACLE MySQL ACCESS VF 常見的資料庫管理系統 目前有許多資料庫產品,如Oracle、Sybase、Informix、Microsoft SQL Server、Microsoft Access、Visual FoxPro等產品各以自己特有的功能,在資料庫市場上佔有一席之地。下面簡要介紹幾種常用的資料庫管理系統。
資料庫管理系統(DBMS)的主要功能
DBMS的主要目標是使數據作為一種可管理的資源來處理,其主要功能如下: 1.數據定義:DBMS提供數據定義語言,供用戶定義資料庫的三級模式結構、兩級映像以及完整性約束和保密限制等約束。 2.數據操作:DBMS提供數據操作語言,供用戶實現對數據的操作。 3.資料庫的運行管理:資料庫的運行管理功能是DBMS的運行控制、管理功能,包括多用戶環境下的並發控制、安全性檢查和存取限制控制、完整性檢查和執行、運行日誌的組織管理、事務的管理和自動恢復,即保證事務的原子性。這些功能保證了資料庫系統的正常運行。 4.數據組織、存儲與管理:DBMS要分類組織、存儲和管理各種數據,包括數據字典、用戶數據、存取路徑等,需確定以何種文件結構和存取方式在存儲級上組織這些數據,如何實現數據之間的聯系。數據組織和存儲的基本目標是提高存儲空間利用率,選擇合適的存取方法提高存取效率。 5.資料庫的保護:資料庫中的數據是信息社會的戰略資源,隨數據的保護至關重要。DBMS對資料庫的保護通過4個方面來實現:資料庫的恢復、資料庫的並發控制、資料庫的完整性控制、資料庫安全性控制。DBMS的其他保護功能還有系統緩沖區的管理以及數據存儲的某些自適應調節機制等。 6.資料庫的維護:這一部分包括資料庫的數據載入、轉換、轉儲、資料庫的重組合重構以及性能監控等功能,這些功能分別由各個使用程序來完成。 7.通信:DBMS具有與操作系統的聯機處理、分時系統及遠程作業輸入的相關介面,負責處理數據的傳送。對網路環境下的資料庫系統,還應該包括DBMS與網路中其他軟體系統的通信功能以及資料庫之間的互操作功能。
7. 大數據技術常用的數據處理方式有哪些
大數據技術常用的數據處理方式,有傳統的ETL工具利用多線程處理文件的方式;有寫MapRece,有利用Hive結合其自定義函數,也可以利用Spark進行數據清洗等,每種方式都有各自的使用場景。
在實際的工作中,需要根據不同的特定場景來選擇數據處理方式。
1、傳統的ETL方式
傳統的ETL工具比如Kettle、Talend、Informatica等,可視化操作,上手比較快,但是隨著數據量上升容易導致性能出問題,可優化的空間不大。
2、Maprece
寫Maprece進行數據處理,需要利用java、python等語言進行開發調試,沒有可視化操作界面那麼方便,在性能優化方面,常見的有在做小表跟大表關聯的時候,可以先把小表放到緩存中(通過調用Maprece的api),另外可以通過重寫Combine跟Partition的介面實現,壓縮從Map到rece中間數據處理量達到提高數據處理性能。
3、Hive
在沒有出現Spark之前,Hive可謂獨占鰲頭,涉及離線數據的處理基本都是基於Hive來做的,Hive採用sql的方式底層基於Hadoop的Maprece計算框架進行數據處理,在性能優化上也不錯。
4、Spark
Spark基於內存計算的准Maprece,在離線數據處理中,一般使用Spark sql進行數據清洗,目標文件一般是放在hdf或者nfs上,在書寫sql的時候,盡量少用distinct,group by recebykey 等之類的運算元,要防止數據傾斜。