【问题标题】:Useragent parsing with Hadoop使用 Hadoop 进行用户代理解析
【发布时间】:2013-07-19 23:50:22
【问题描述】:

我正在寻找一个库来帮助 mi 从用户代理中提取特征以用于 Hadoop(Pig 或 Hive)。我主要对移动用户感兴趣。
我希望能够提取如下特征:

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

我正在考虑使用 WURLF 或 OpenDDR 之类的项目,但它们提供的 API 可在我的 Hadoop 作业中使用,由于需要外部服务器来提供该 API,因此效果不是很好。

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

【问题讨论】:

    标签: parsing hadoop user-agent


    【解决方案1】:

    这个包包含一个用于 Pig 的 UDF,可能会有所帮助。

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

    【讨论】:

      【解决方案2】:

      使用 Hadoop 和 Wurfl 的最简单方法是使用 Hadoop 的流式接口并用 PHP 或 Python 编写映射器和化简器脚本。映射器脚本将导入 WURFL 库,然后您可以查找设备并发出您正在寻找的变量。减速机应适当计数。

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

      【讨论】:

        【解决方案3】:

        如果您可以使用 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" 
        

        【讨论】:

          猜你喜欢
          • 2014-03-22
          • 1970-01-01
          • 1970-01-01
          • 2021-09-13
          • 2012-10-24
          • 1970-01-01
          • 2010-10-29
          • 1970-01-01
          相关资源
          最近更新 更多