pyspark - 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)
解决方案
虽然不是开源工具,但在分析 User-Agent(或更一般的 HTTP 请求)时,WURFL 是需要更多功能的大公司(Akamai、AWS、Google...)使用的事实上的标准工具属性和对其 HTTP 流量的细粒度分析。
这是一篇博客文章,解释了如何集成 WURFL 和 PySpark。如果作者能在文章中引用这一点,那就太棒了。
披露:我是 WURFL 的发明者
推荐阅读
- javascript - 有没有办法在 lodash 中的一系列对象对象中检查 null 或 undefined
- python - copy() 在熊猫中是一个好习惯吗?
- maven - 无法在 Maven 存储库中找到工件
- c++ - 在英特尔至强融核上的线程之间交换数据 - BSP 模型
- amazon-ecs - 使用 AWS ECS Fargate 进行水平和垂直自动扩展
- php - 从数组php中删除自定义对象
- kotlin - 如何在kotlin协程中取消后重新启动作业?
- c# - .net 使用随机时我总是得到否定的答案
- c++ - c++排序函数中的第三个参数是什么?
- angular - 无法在“FileReader”上执行“readAsText”:参数 1 不是“Blob”类型