招商銀行信用卡中心2019秋招IT筆試(大資料方向第一批)
1.關於資料完整性的說法正確的是
實體完整性要求每個實體都必須有一個主鍵或其他的唯一標識列
2.Python如何定義一個函式
def<name>(arg1,arg2,...argN)
3.有關資料倉庫的開發特點,不正確的描述是
資料倉庫開發要從資料出發
(資料倉庫使用的需求在開發出去就要明確、資料倉庫的開發是一個不斷迴圈的過程,是啟發式的開發、在資料倉庫環境中,並不存在操作型環境中所固定的和較確切的處理流,資料倉庫中資料分析和處理更靈活,且沒有固定的模式)
4.桶排序和快速排序在最好的情況下的時間複雜度分別為
O(n),O(nlgn)
5.資料庫系統中採用封鎖技術的目的是為了保證
資料的一致性
6.python程式碼如下:
a = [i for i in range(0,10) if i%2 == 0]
b = (i for i in range(0,10) if i%2 == 0)
則以下說法正確的是
b值為[0, 2, 4, 6, 8]
7.以下關於ETL的說法錯誤的是
ETL過程中的主要環節是資料抽取、資料轉換和加工、資料流轉
(增量資料抽取過程中,提取增量資料的方法有通過時間戳、建立觸發器、全表比對、日誌比對等。常用ETL工具包括datastage,微軟DTS,Informatica等。資料清洗需要對維表中的重複資料進行處理)
8.關於Hive 中的壓縮格式 RCFile、TextFile、SequenceFile說法錯誤的是
相比TEXTFILE和SEQUENCEFILE,RCFILE由於列式儲存方式,資料載入時效能消耗較小,且具有較好的壓縮比和查詢響應
(TextFile是Hive預設格式,不作壓縮,磁碟及網路開銷較大。可以結合Gzip, Bzip2使用,但使用這種方式,hive不會對資料進行切分,從而無法對資料進行並行操作、SequenceFile 是Hadoop API提供支援的一種二進位制檔案,具有使用方便,可分割,可壓縮的特點,支援三種壓縮選擇:NONE, RECORD, BLOCK。RECORD壓縮率低,一般建議使用BLOCK壓縮、RCFILE是一種行列儲存相結合的的儲存方式。首先,將資料按行分塊,保證同一個record在一個塊上,避免讀一個記錄需要讀取多個block。其次,塊資料列式儲存,有利於資料壓縮。)
9.關於python中的複數,下列說法錯誤的是?
實部和虛部都是浮點數
10.下面有關HIVE描述錯誤的是
parquet是行式儲存,orc是列式儲存
(Hive的集合資料型別有map,struct,array這三種、hive.mapred.mode=strict表示所有查詢語句都必須指定分割槽、hive.auto.convert.join為mapjoin開關)
11.spark不支援 c++
12.下列哪個元件不能使用Hadoop YARN進行資源管理 Tez
13.啟用Hadoop2版本的Namenode高可用之後,哪些元件不再使用 DataNoe
14.以下關於Flume,說法錯誤的是
Channel中filechannel可將資料持久化到本地磁碟,但配置較為麻煩,需要配置資料目錄和checkpoint目錄,不同的file channel可以配置同一個checkpoint目錄
15.在bash中,export命令的作用是
為其它應用程式設定環境變數
16.Python中定義函式時的引數為 形參
17.下列哪些函式是開窗函式
row_number()、rank()、over()
18.給你兩張表,表A和表B,其中表A有3行資料,表B有5行資料,表A left join 表B後,以下說法正確的是
大於3,小於5,大於5
19.關於子查詢以下哪兩種說法是正確的?
先執行子查詢,再執行外層查詢
外層查詢返回的每行結果都與內層查詢結果進行比較
20.關於python變數,下列說法正確的是
變數無須指定型別、可以使用del關鍵字釋放變數
21.以下Python資料型別中,不可以通過索引訪問的是
集合、字典
22.談談資料集市、資料倉庫的區別和聯絡
1) 資料倉庫是企業級的,能為整個企業各個部門的執行提供決策支援手段;
資料集市則是一種微型的資料倉庫,它通常有更少的資料,更少的主題區域,以及更少的歷史資料,因此是部門級的,一般只能為某個區域性範圍內的管理人員服務,因此也稱之為部門級資料倉庫。
(2) 資料倉庫向各個資料集市提供資料
(3) 幾個部門的資料集市組成一個數據倉庫
(4) 通常倉庫中資料粒度比集市的粒度要細
作為一個包含多個業務部門,且有大量應用系統的企業,應該如何去設計搭建資料集市。
開放性題目,可以按照部門劃分集市,也可以按照應用系統劃分集市等等
23.
現有學生分數統計表pub_f_class_score如下:
std_nm(學生姓名) class(班級) score(分數) insert_dt(更新時間)
nm1 cls1 98 2018-08-22
nm2 cls2 97 2018-08-22
nm3 cls1 97 2018-08-22
nm4 cls1 95 2018-08-22
nm5 cls2 92 2018-08-22
nm6 cls2 84 2018-08-22
nm7 cls1 91 2018-08-22
nm8 cls2 89 2018-08-22
nm9 cls2 91 2018-08-22
現在需要統計出每個班級中排名前三的學生姓名以及其分數,請寫出SQL實現
select t.std_nm, t.class, t.score, t.od from
(select std_nm, class, score, row_number() over (partition by class order by score desc) as od from pub_f_class_score)t where od<=3;
24.談談你對ETL過程中資料清洗的認識
資料清洗包括以下內容:
資料補缺:對空資料、缺失資料進行資料補缺操作,無法處理的做標記。
資料替換:對無效資料進行資料的替換。
格式規範化:將源資料抽取的資料格式轉換成為便於進入倉庫處理的目標資料格式。
主外來鍵約束:通過建立主外來鍵約束,對非法資料進行資料替換或匯出到錯誤檔案重新處理。
25.設計一套報表系統的許可權體系,具體場景為A開發某些報表,供本部門或其他部門的人員訪問,所有人員的組織結構按照部門區分,每個部門的報表有很多,每個報表供訪問的物件也不相同,有一些人會訪問固定的一類報表,如何設定報表許可權體系能滿足需求場景並且設計相對簡單,維護成本低?可以闡述在你設計的許可權體系下如報表或人員發生變更的時候是否只涉及簡單的許可權變更。
1) 每個報表的許可權要有明確的歸屬
2) 可以考慮將固定的報表或固定的人形成統一的許可權集合,但兩者最好不要同時存在
3) 當報表或者人員發生變更時,涉及的許可權變更越簡單越好
26.
小趙在測試spark的時候,寫了如下的程式碼
do
lines = sc.textFile("data.txt")
pairs = lines.map(lambda s: (s, 1))
counts = pairs.groupByKey(lambda a, b: a + b)
結果執行時等待了一段時間直接報錯,data.txt檔案較大,小趙對其進行抽樣後結果如下:
data
apple
apple
apple
new
name
apple
apple
work
as
請分析報錯的原因以及解決方案
報錯是由於資料傾斜導致的
資料傾斜的原因,由於key本身分佈不均衡(重要),或者shuffle時的併發度不夠,過多的資料在同一個task中執行,把executor撐爆。
解決方案(前三點任一)
1)隔離執行,將異常的key過濾出來單獨處理,最後與正常資料的處理結果進行union操作。
2)對key先新增隨機值,進行操作後,去掉隨機值,再進行一次操作:
將原始的 key 轉化為 key + 隨機值(例如Random.nextInt)
對資料進行 reduceByKey(func)
將 key + 隨機值 轉成 key
再對資料進行 reduceByKey(func)
3)使用reduceByKey 代替 groupByKey,reduceByKey已經做過一次merge,節約了記憶體
4)調高shuffle的並行度
27.以WordCount為例,分別畫出使用mapredeuce執行的詳細過程和以spark執行的詳細過程。