分享

关于 spark 编程的一个问题。

xpy888 发表于 2014-10-25 11:17:32 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 6 14938
1412043042      125.64.229.40   CN5115        auto.sohu.com   /wmh-auto-tab?pvid=tc_auto&a=tab&b=auto        000242D62CB409A55251BDCE0D3381D3
1412037977      60.165.17.191   CN6201        auto.sohu.com   /wmh-auto-tab?pvid=tc_auto&a=tab&b=auto        00026D7C9E94DA60EE020DC57AB4EB73
1412036910      1.83.119.80     CN6101        jiangjia.auto.sohu.com  /110000/157/4001/0/all/all/0/0/fd/0.html        00029B77BFAD79F18EBF90DBACBDDE21
1412040269      1.85.212.7      CN6101        db.auto.sohu.com        /model_1004/pic_t3295555.shtml        00029B77BFAD79F18EBF90DBACBDDE21
1412040254      1.85.212.7      CN6101        db.auto.sohu.com        /model_1004/pic_t3106880.shtml         00029B77BFAD79F18EBF90DBACBDDE21
1412040271      1.85.212.7      CN6101        db.auto.sohu.com        /model_1004/pic_t3295553.shtml        00029B77BFAD79F18EBF90DBACBDDE21
1412040292      1.85.212.7      CN6101        db.auto.sohu.com        /model_1004/pic_m3235689.shtml        00029B77BFAD79F18EBF90DBACBDDE21


第一列: 时间
第二列: ip
第三列: 地区码,相当于某个地区的代码
第四列: 域名
第五列: url
第六列:suv  --> (说明:来计算uv的),需要去重的

现在想通过spark 来计算 当前日志中包含 db.auto.sohu.com 的 pv 和 uv

val rdd = sc.textFile("/user/logs/pvlog/test1")
xxxxxxx ,
rdd.map(_.split("\t")).filter(_(3)).contains("db.auto.sohu.com").count // 这个求出来的只是 包含 "db.auto.sohu.com" 的 pv ,而 uv呢? 如何计算????,请各位出出注意

已有(6)人评论

跳转到指定楼层
muyannian 发表于 2014-10-25 11:40:17
UV计算一下ip就可以了
回复

使用道具 举报

pig2 发表于 2014-10-25 11:49:04

00029B77BFAD79F18EBF90DBACBDDE21

这个是不是获取的cookie,如果这样的,去重就能得出UV了。

UV是指的自然人,然而这个自然人判断的标准可以根据cookie来判断,虽然可能是同一个ip,但是如果cookie不同,说明就是两个用户。所以有多少cookie就有多少自然人访问。
回复

使用道具 举报

xpy888 发表于 2014-10-25 11:59:42
其实 第六列就是 suv , 类似说的 uv。 可是这个怎么来写呢?关键。其实最后我想得到这样的一个效果:

db.auto.sohu.com   2000 1500
回复

使用道具 举报

rsgg03 发表于 2014-10-25 12:28:50
需要说一下你的具体场景,实现方式很多种。
spark适用于实时计算的,如果简单的去重没有必要使用spark。

简单来说:
一、可以使用数据库去重


1.hive去重,把定义输出结果
  1. db.auto.sohu.com   2000 1500
复制代码

2.pig也可以去重,这个简单些,可以了解pig语法


Pig编程指南【完整版】书籍分享


PIG实战


pig系统学习


3.当然hbase也可以去重。


上面建议使用pig,hive也可以,时间长一些。


二、自己编写代码去重


spark
比如你现在想用spark,可以的。


采用循环过滤的方法,最后把结果输出保存。


mapreduce


mapreduce同样也是可以的。当我们运行mapreduce的时候有待输入的文件,经过mapreduce处理之后,会有输出文件,这个输出文件就是你想要的结果。

如下输入数据为两个文本文件:



经过mapreduce处理后,如下显示结果




spark也是同样的道理,所以想要得到你想要的结果很容易的。


详细参考
MapReduce初级案例(1):使用MapReduce去重








回复

使用道具 举报

bioger_hit 发表于 2014-10-25 18:09:25
架构可以有多种

大数据架构:flume-ng+Kafka+Storm+HDFS 实时系统组合


flume+spark+hdfs

上面都可以达到实时处理


回复

使用道具 举报

xpy888 发表于 2014-10-27 11:57:15
感谢大家的热情回答。
可是我现在想通过 spark来实现呢? 各位能写一下代码吗?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条