使用Hadoop进行解析

时间:2012-02-02 14:51:54

标签: parsing hadoop user-agent

我正在寻找一个库来帮助mi从提取者中提取功能,以便与Hadoop(Pig或Hive)一起使用。我主要对移动用户感兴趣 我希望能够提取以下功能:

  • 操作系统版本
  • 浏览器版本
  • 屏幕尺寸
  • 供应商名称
  • 型号名称
  • etc ...(useragent中未明确给出的功能)

我正在考虑使用像WURLF或OpenDDR这样的项目,但是他们提供的API可以在我的Hadoop作业中使用,因为需要外部服务器来提供API,所以它们不会非常有效。

如果你知道这样的项目请告诉我,或者我正在寻找解决方案如何有效地使用WURLF或OpenDDR与Hadoop。

3 个答案:

答案 0 :(得分:2)

此软件包包含一个可能有用的猪UDF。

https://github.com/tobie/ua-parser

答案 1 :(得分:0)

使用Hadoop和Wurfl最简单的方法是使用Hadoop的流媒体界面,并用PHP或Python编写mapper和reducer脚本。映射器脚本将导入WURFL库,然后您可以查找设备并发出您要查找的变量。减速器应该适当计数。

有关Hadoop,Python和Streaming接口的优秀教程可在以下网址找到:http://www.michael-noll.com/tutorials/writing-an-hadoop-mapreduce-program-in-python/

答案 2 :(得分:0)

如果你可以使用RegEx,那么:Java or Pig regex to strip out values from UserAgent string可能有所帮助。

如果RegEx没有帮助,那么您可能需要编写一个可以解析用户代理并输出所需信息的Pig的自定义UDF:http://wiki.apache.org/pig/UDFManual

我最终用Python编写了一个Hadoop流工作 - Python map程序解析了useragent字符串并输出了传递给reducer的变量。在伪代码中,它看起来像这样:

for line in sys.stdin:
  result = mylog.parse (line)
  # mylog.parse() results a list/dictionary with the parsed line
  useragent = result['useragent']
  if ('indows' in useragent):
    os = "Windows"
  elif ('ndroid' in useragent):
    os = "Android"
  elif ('Linux' in useragent):
    os = "Linux"
  print os + "\t" + "1"