首页 > 解决方案 > Pyspark user_agent 解析

问题描述

我是 PySpark 的新手,请教。我正在 为 PySpark 数据框使用https://pypi.org/project/user-agents/

我想为 PySpark 数据框列(user_agent)应用 user_agents 库。user_agent 记录:user_agent='Mozilla/5.0 (Linux; Android 8.1.0; SM-T580) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.93 Safari/537.36

我的代码:

from user_agents import parse 

df = df.withColumn("browser", parse((df.user_agent.cast("string")))) 

错误:

 TypeError: unhashable type: 'Column'

我是这样做的,但是花费了太多时间(我该如何优化它):

    from user_agents import parse
    vals_init = [("", "", "","","")]
    columns = ['browser', 'os', 'device-brand','device-family',   
    'device-model' ]
    df1 = spark.createDataFrame(vals_init, columns)
    for row in df.rdd.collect():
    #    str(row.user_agent)
    #    user_agent = parse(str(row.user_agent))
       print(user_agent.browser[0])  #browser
       print(user_agent.os[0])  #OS
       print(user_agent.device.family)  # returns 'iPhone'
       print(user_agent.device.brand) # returns 'Apple'
       print(user_agent.device.model) # returns 'iPhone'
       vals = [(user_agent.browser[0],  
       user_agent.os[0],user_agent.device.family,
       user_agent.device.family,user_agent.device.brand,
       user_agent.device.model)]

       newRow =       
       spark.createDataFrame([(user_agent.browser[0],user_agent.os[0],                                           
       user_agent.device.family,user_agent.device.brand,
       user_agent.device.model)], columns)
       df1 = df1.union(newRow)

标签: pyspark

解决方案


虽然不是开源工具,但在分析 User-Agent(或更一般的 HTTP 请求)时,WURFL 是需要更多功能的大公司(Akamai、AWS、Google...)使用的事实上的标准工具属性和对其 HTTP 流量的细粒度分析。

这是一篇博客文章,解释了如何集成 WURFL 和 PySpark。如果作者能在文章中引用这一点,那就太棒了。

披露:我是 WURFL 的发明者


推荐阅读