一、要求
將xml中的account_number、model資料提取出來,並以account_number:model格式儲存
1、xml檔案資料格式
<activations
>
<
activation
timestamp
="1225499258"
type
="phone"
>
<
account-number
>316
account-number
>
<
device-id
>
d61b6971-33e1-42f0-bb15-aa2ae3cd8680
device-id
>
<
phone-number
>5108307062
phone-number
>
<
model
>ifruit 1
model
>
activation
>
…activations
>
2、儲存格式:
1234:ifruit 1
987:sorrento f00l
4566:ifruit 1
二、**
importscala.xml._
//給定乙個包含xml的字串,解析字串,並返回字串中包含的啟用xml記錄(節點)的迭代器
def getactivations(xmlstring: string): iterator[node] =
//給定乙個啟用記錄(xml節點),返回模型名稱
def getmodel(activation: node): string =
//給定乙個啟用記錄(xml節點),返回帳號
def getaccount(activation: node): string =
//mydata1:(0:"路徑":1:"內容")
//wholetextfiles 建立包含檔名、檔案內容的rdd
var mydata1 = sc.wholetextfiles("file:/home/training/training_materials/data/activations/")
//flatmap 遍歷rdd中的檔案內容得到檔案內容的rdd
val mydata2=mydata1.flatmap(line =>getactivations(line._2))
//通過函式獲取對應節點的值,建立account-number:model rdd
val mydata3=mydata2.map(line => getaccount(line)+":"+getmodel(line))
//輸出資料,測試資料格式
mydata3.take(10).foreach(println)
三、函式解釋
sc.wholetextfiles(directory)
從hdfs中讀取文字檔案的目錄,本地檔案系統(在所有節點上可用),或者任何hadoop支援的檔案系統uri。
每個檔案被讀取為單個記錄,然後返回到鍵值對中,其中鍵是每個檔案的路徑,值是每個檔案的內容。
例如:
(filel
.json, )
(file2
.json, )
(file3
.json,
...
)(file4
.json,
...
)
Spark 操作hive實戰練習
比如 user3,已經有了5月5號的訂單 不公開 來評測模型的 我們有的是5月4號之前的歷史資料 我們需要 通過歷史 5月4號之前訂單資料 這個使用者5月5號買了什麼 1 資料準備 a 在hive中建立orders訂單外部表 b 在hive中建立products商品外部表 c 在hive中建立pri...
Spark實戰練習03 Pair RDD
一 場景 現有某 的 日誌,內容為使用者對 的請求,包含user id ip address datetime 等等 另有乙份檔案中包含使用者的賬戶詳細資訊資料,包含user id creation date first last name等等 二 任務 1 統計每位使用者的請求次數 1 從檔案建立...
Spark實戰練習02 處理分隔符
一 場景 devicestatus.txt 檔案包含了來自於不同運營商的移動裝置的資料,不同的資料格式,包括裝置id 當前狀態 位置等等。注意,該檔案中的記錄具有不同的字段分隔符 一些使用逗號,一些使用管道 等等。二 任務 提取date 第乙個字段 model 第二個字段 devive id 第三字...