spark处理中文遇到的乱码问题(小表join大表)

原创 2018年04月16日 09:24:36
package cn.bw.spark.object_cxb

import cn.bw.spark.object_cxb.WriteSQL.{sc, transfer}
import org.apache.hadoop.io.{LongWritable, Text}
import org.apache.hadoop.mapred.TextInputFormat
import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}


object Joins extends App {

  //io包 汉字类型的转换 直接cp用
  def transfer(sc: SparkContext, path: String): RDD[String] = {
    sc.hadoopFile(path, classOf[TextInputFormat],
      classOf[LongWritable], classOf[Text], 1).map(
      p => new String(p._2.getBytes, 0, p._2.getLength, "GBK")
    )
  }

  val conf = new SparkConf().setAppName("Joins").setMaster("local[3]")
  val sc = new SparkContext(conf)
  //sex=男, email=2u5wk5@aol.com, tel=15500121817, name=李进, road=1001
  val xiao = transfer(sc, "d:/15.txt").map(t => {
    val files = t.split(",")
    val sex = files(0).split("=")
    val email = files(1)
    val tel = files(2)
    val name = files(3)
    val address = files(5)
    (address, (name, email, tel, sex(1)))
  })

  //println(rdd1.take(5).toBuffer) (( name=李进, email=2u5wk5@aol.com, tel=15500121817),男)

  val da = transfer(sc, "d:/16.txt").map(t => {
    val daFile = t.split(",")
    (daFile(3), (daFile(0), daFile(1), daFile(2)))
  })
  //println(da.take(5).toBuffer)

  val rdd2 = da.join(xiao).map(t => {
    val id = t._1
    val names = t._2._2._1 //名字
    val emails = t._2._2._2 //email
    val tels = t._2._2._3 //电话
    val sexs = t._2._2._4 //性别
    val quming = t._2._1._3 //区名
    (id, names, emails, tels, sexs, quming)
  })
  println(rdd2.collect().toBuffer)
  //groupBy后就会自动把sexs变为key,之后再对value进行操作
  val rdd3 = rdd2.groupBy(_._5).mapValues(t => {
    t.toList.sortBy(_._4).reverse.take(5)
  })

  println(rdd3.collect().toBuffer)
  //rdd3.saveAsTextFile("d:/obj")                                                                                                                                                                                                                         ``    ect/join")
  // println(rdd3.collect().toBuffer)
}

spark实战

Spark是UC Berkeley AMP lab (加州大学伯克利分校的AMP实验室)所开源的类Hadoop MapReduce的通用并行框架,Spark,拥有Hadoop MapReduce所具有的优点;但不同于MapReduce的是Job中间输出结果可以保存在内存中,从而不再需要读写HDFS,因此Spark能更好地适用于数据挖掘与机器学习等需要迭代的MapReduce的算法。
  • 2016年11月10日 14:26

Spark 处理中文乱码问题(UTF-8编码)

问题场景 要用spark处理一大堆微信日志数据,日志存放在HDFS上,是xml格式,里面有大量的中文。用scala + java实现了xml的处理逻辑,其中有一步是要获取xml中的一个title字段,...
  • Amber_amber
  • Amber_amber
  • 2015-12-03 16:14:24
  • 14930

spark-大表join优化方案

数据量: 1~2G左右的表与3~4T的大表进行Join拆分 将任务数据分为多个结果RDD,将各个RDD的数据写入临时的hdfs目录,最后合并调整并行度和shuffle参数 spark-submi...
  • qq_16038125
  • qq_16038125
  • 2017-06-09 14:04:03
  • 1935

spark sql优化:小表大表关联优化 & union替换or & broadcast join

----原语句(运行18min)    SELECT            bb.ip    FROM            (                    SELECT          ...
  • zhuiqiuuuu
  • zhuiqiuuuu
  • 2018-02-08 16:14:16
  • 198

sparksql优化1(小表大表关联优化 & union替换or)

----原语句(运行18min) INSERT into TABLE schema.dstable SELECT bb.ip FROM (SELECT ip, sum(click) cl...
  • xjping0794
  • xjping0794
  • 2017-11-07 18:03:15
  • 596

Spark实践之join优化

join优化应该是spark相关岗位面试必考的内容。 join其实常见的就分为两类: map-side join 和  reduce-side join。当大表和小表join时,用map-side j...
  • asdfghjkl1993
  • asdfghjkl1993
  • 2015-07-08 10:57:05
  • 4975

hive join 优化 --小表join大表

1、小、大表 join 在小表和大表进行join时,将小表放在前边,效率会高,hive会将小表进行缓存。 2、mapjoin 使用mapjoin将小表放入内存,在map端和大表逐一匹配,从而省去red...
  • smile0198
  • smile0198
  • 2014-10-25 21:49:25
  • 5019

Hive中小表与大表关联(join)的性能分析

经常看到一些Hive优化的建议中说当小表与大表做关联时,把小表写在前面,这样可以使Hive的关联速度更快,提到的原因都是说因为小表可以先放到内存中,然后大表的每条记录再去内存中检测,最终完成关联查询。...
  • wisgood
  • wisgood
  • 2014-01-01 21:59:19
  • 4240

20亿与20亿表关联优化方法(超级大表与超级大表join优化方法)

记得5年前遇到一个SQL,就是一个简单的两表关联,SQL跑了差不多一天一夜,这两个表都非常巨大,每个表都有几十个G,数据量每个表有20多亿,表的字段也特别多。 相信大家也知道SQL慢在哪里了,单个进...
  • robinson1988
  • robinson1988
  • 2016-02-27 21:57:07
  • 15026

Nexted-loop join中小表驱动大表的原因分析

nexted-loop join: outer_iterator = SELECT A.xx,A.c FROM A WHERE A.xx IN (5,6); outer_row = outer_i...
  • light_language
  • light_language
  • 2017-07-31 20:53:27
  • 485
收藏助手
不良信息举报
您举报文章:spark处理中文遇到的乱码问题(小表join大表)
举报原因:
原因补充:

(最多只允许输入30个字)