Spark实战练习01--XML数据处理
2024-10-01 06:30:54
一、要求
将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
二、代码
import scala.xml._ //给定一个包含XML的字符串,解析字符串,并返回字符串中包含的激活XML记录(节点)的迭代器
def getactivations(xmlstring: String): Iterator[Node] = {
val nodes = XML.loadString(xmlstring) \\ "activation"
nodes.toIterator
} // 给定一个激活记录(XML节点),返回模型名称
def getmodel(activation: Node): String = {
(activation \ "model").text
} // 给定一个激活记录(XML节点),返回帐号
def getaccount(activation: Node): String = {
(activation \ "account-number").text
} //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,{"firstName":"Fred","lastName":"Flintstone","userid":"123"} )
(file2.json,{"firstName":"Barney","lastName":"Rubble","userid":"234"} )
(file3.json,... )
(file4.json,... )
最新文章
- MVC4做网站后台:用户管理 &mdash;&mdash;用户组 2、查看、修改、删除用户组
- C#如何实现一个简单的流程图设计器
- 严格遵守“第一级DOM”能够让你避免与兼容性有关的任何问题
- Codeforces Round #350 (Div. 2) F. Restore a Number 模拟构造题
- sql server日志不能shrink或truncate
- Hadoop学习过程知识积累
- Ruby Scripting - Array
- 数据库(学习整理)----5--Oracle常用的组函数
- Java web 实现 之 Filter分析ip统计网站的访问次数
- 关于ie的h5 刷新和ctrl+5刷新 以及图标刷新的问题
- 含有n个元素的整型数组,将这个n个元素重新组合,求出最小的数,如{321,3,32},最小的数为321323
- Linux 进程间通信(包含一个经典的生产者消费者实例代码)
- tomcat生产部署关键参数设置
- smarty 循环一维关联数组
- 【Django】数据迁移问题
- hdu 5724 Chess 博弈sg+状态压缩
- 《汇编语言 基于x86处理器》第十章 - 运行一个 16位实地址汇编程序
- 乘风破浪:LeetCode真题_024_Swap Nodes in Pairs
- 利用JS验证查询参数-选择月份后必须选择年份
- Tempdb--monitoring and troubleshooting