spark:学习杂记--23

这篇博客主要记录了关于Spark的学习心得,涉及到ID排序的相关内容。通过ID1至ID4的例子,阐述了如何对数据进行排序处理,是理解Spark数据操作的一个实践应用。

ID1 sendoh akria

ID2 ximen luxiaofeng

ID3 sendoh ximen

ID4 yegucheng shedoh

根据关键字从新排序:

package fff

import org.apache.log4j.{Level, Logger}
import org.apache.spark.{SparkContext, SparkConf}

import scala.collection.mutable
import scala.collection.mutable.ListBuffer

/**
 * Created by sendoh on 2015/4/9.
 */
object InvertedIndex {
  def main(args: Array[String]): Unit ={
    //
    Logger.getLogger("org.apache.spark").setLevel(Level.WARN)
    Logger.getLogger("org.eclipse.jetty.server").setLevel(Level.OFF)
    //
    if(args.length != 3){
      println("Usage: java -jar code.jar dependency_jars file_locaion save_location")
      System.exit(0)
    }
    val jars = ListBuffer[String]()
    args(0).split(',').map(jars += _)
    val conf = new SparkConf().setAppName("InvertedIndex").setSparkHome("/usr/local/spark-1.2.0-bin-hadoop2.4").setMaster("local[2]").setJars(jars)
    val sc  = new SparkContext(conf)
    //读取数据,数据格式为一个大的HDFS文件中用\n分隔不同的文件,用\t分隔文件ID和文件内容,用“”分隔文件内的词汇
    val data = sc.textFile("hdfs://localhost:9000/datatnt/textwordd.txt").map(_.split("\t")).map(x => {(x(0), x(1))})
      .flatMap(x => {
      //将数据项转换为LinkedList[(词,文档ID)]的数据项,并通过flatmap将RDD内的数据项转换为(词,文档ID)
      val list = new mutable.LinkedList[(String, String)]
      val data = x._2.split(" ").iterator
      while(data.hasNext){
        list + data.next()
      }
      list
    }).distinct()
    //将(词,文档ID)的数据进行聚集,相同词对应的文档ID统计到一起,形成(词,“文档ID1,文档ID2,文档ID3···”),形成简单的倒排索引
    data.map(y => {(y._2, y._1)}).reduce((a, b) => {a+"\t"+b}).saveAsTextFile("hdfs://localhost:9000/outputtnt/textwoddd")
    //data.map(y => {(y._2, y._1)})
    //'\t'.join(data).saveAsTextFile("hdfs://localhost:9000/outputtnt/textwoddd")
  }

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值