zoukankan      html  css  js  c++  java
  • Spark实战练习01--XML数据处理

    一、要求

    将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,... )

  • 相关阅读:
    看K线学炒股(8.10)
    看K线学炒股(8.9)
    看K线学炒股(8.5)
    看K线学炒股(0803)
    看K线学炒股(7.29)
    看K线学炒股(7.21)
    看K线学炒股(2021.07.20)
    看K线学炒股
    说说英力特这只股票
    matlab里的数据转换到Python中去的一个问题
  • 原文地址:https://www.cnblogs.com/damonzjw/p/8521757.html
Copyright © 2011-2022 走看看