解析旅游者心声:用PySpark和SnowNLP揭秘景区评论的情感秘密

简介:

在本篇博客中,我们将探讨如何利用PySpark和SnowNLP这两个强大的工具来分析大规模的旅游评论数据。通过结合携程和去哪儿的数据作为示例,我们将探索如何从海量的评论中提取有价值的情感信息和洞察。PySpark作为一种分布式计算框架,能够处理大规模的数据集,为我们提供了处理大数据的能力。而SnowNLP作为一种自然语言处理工具,能够帮助我们对中文文本进行情感分析,从而揭示出评论中隐藏的情感倾向和情感趋势。通过本文的学习,读者将不仅了解情感分析的基本原理和技术,还能掌握如何利用这些技术来解读和分析旅游评论数据,为旅游业的改进和优化提供实际的指导和建议。

开发环境

Python,HDFS,spark,hive。

链接hive

# Author: 冷月半明
# Date: 2023/12/7
# Description: This script does XYZ.
from pyspark.sql import SparkSession
from pyspark.sql.types import StructType, StructField, StringType, IntegerType


# 创建SparkSession并连接到远程Spark服务器
spark = SparkSession.builder.appName("RemoteSparkConnection").master("yarn").config("spark.pyspark.python", "/opt/apps/anaconda3/envs/myspark/bin/python").getOrCreate()


print("链接成功")
# 使用spark.sql()从Hive表中读取数据
df = spark.sql("SHOW DATABASES;")

# 显示数据
df.show()
# 关闭SparkSession
spark.stop()

image.png

此时因为没指定源数据库位置信息,因此只有默认库。
网上解决方式有两种,其一在使用pyspark是指定元数据位置,其二在spark设置里粘入hive-site.xml,在此使用第一种方式。

当指定元数据存储位置后再次查询,就能正常显示。

image.png

image.png

计算去哪网的情感得分

def qvna():
    print("链接成功")
    df = spark.sql("SELECT * FROM cjw_data.qvna;")
    print(type(df))
   
    # 定义一个新的 UDF,用于计算每一行的平均情感值
    def calculate_average_sentiment(commentlist):
        try:
            jsonstr = str(commentlist)
            python_obj = json.loads(jsonstr, strict=False)
        except:
            return None

        contentcores = []
        for item in python_obj:
            for i in item:
                if (i["content"] != "用户未点评,系统默认好评。"):
                    contentcores.append(SentimentAanalysis(i["content"]))
        if len(contentcores) > 0:
            average = sum(contentcores) / len(contentcores)
        else:
            average = None  # 如果数组为空,返回 None
        return average

    calculate_average_sentiment_udf = udf(calculate_average_sentiment, StringType())
    # 使用 withColumn 方法添加新的字段
    df = df.withColumn("average_sentiment", calculate_average_sentiment_udf(df["commentlist"]))
    newdf = df.select("id", "title", "price", "average_sentiment")
    newdf.write.mode("overwrite").saveAsTable("cjw_data.qvnasentiment")
    print(newdf)
    print(newdf.count())
    newdf.show(20)

首先,我们通过 PySpark 的 spar

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/498885.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Java服务运行在Linux----维护常用命令

想起来哪些再添加上去 查看Java程序进程 jps -l 查出进程后根据pid 查询程序所在目录 pwdx 31313 根据端口查找PID 根据pid杀死程序 kill -p 31313 查看目录下所有包含9527的文件 grep -rn 9527 查看磁盘空间 查找文件名"nginx"文件或模糊查找"*nginx*&quo…

Mysql中如何显示第几周

在数据分析中,经常需要对日期和时间进行格式化处理,以便更直观地展示和理解数据。 MySQL 5.7提供了强大的DATE_FORMAT函数,允许用户根据特定的格式字符串来显示日期和时间。 Week函数 最直接的是使用YEAR、WEEK函数 SELECTYEAR(NOW()) AS C…

健身运动耳机哪个牌子好?力荐五大品质翘楚的精品

健身已经成为许多人追求健康与活力的重要方式,而在健身的过程中,一款优质的耳机不仅能让你沉浸于音乐的世界,更能提升运动体验,激发无限潜能,那么如何选择一款既适合运动又品质卓越的耳机呢?今天我这个健身…

【热门话题】Yarn:新一代JavaScript包管理器的安装与使用

🌈个人主页: 鑫宝Code 🔥热门专栏: 闲话杂谈| 炫酷HTML | JavaScript基础 ​💫个人格言: "如无必要,勿增实体" 文章目录 Yarn:新一代JavaScript包管理器的安装与使用引言一、Yarn的安装1. 系…

element-ui inputNumber 组件源码分享

今日简单分享 inputNumber 组件的实现原理,主要从以下四个方面来分享: 1、inputNumber 组件的页面结构 2、inputNumber 组件的属性 3、inputNumber 组件的事件 4、inputNumber 组件的方法 一、inputNumber 组件的页面结构。 二、inputNumber 组件的…

linux安装Zookeeper的详细步骤

1.Java环境确认 确保已经安装了Java环境,没有的自行安装 2.官网下载包 Apache ZooKeeper 3.安装 3.1上传到linux,解压 我的目录为/root/apache-zookeeper-3.8.4-bin 进入到/root/apache-zookeeper-3.8.4-bin/conf目录下,执行命令复制zoo…

由浅到深认识Java语言(44):Junit单元测试

该文章Github地址:https://github.com/AntonyCheng/java-notes 在此介绍一下作者开源的SpringBoot项目初始化模板(Github仓库地址:https://github.com/AntonyCheng/spring-boot-init-template & CSDN文章地址:https://blog.c…

硬件12、PCB模块化布局

模块画布局其实就是根据原理图中绘制的小模块,比如3.3V芯片及其外围电路部分的元器件在PCB中放在一起进行布线,会方便很多 1、最好打开分屏,一边在原理图中选中模块,一边在PCB中绘制 2、选中原理图中的模块的所有元件&#xff0…

工业智能物联网关如何助力工业防震减灾

地震灾害难以预料,一旦发生往往就损失重大。对于工业领域而言,地震灾害的影响不仅仅是对人员安全的威胁,还包括对生产设施的破坏、生产进程的中断以及伴生的持续性经济损失。 随着5G、大数据、物联网技术的发展,面向工业领域构建一…

有效的数独-java

题目描述: 请你判断一个 9 x 9 的数独是否有效。只需要 根据以下规则 ,验证已经填入的数字是否有效即可。 数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。(请参考示例图&#…

python如何获取word文档的总页数

最近在搞AI. 遇到了一个问题,就是要进行doc文档的解析。并且需要展示每个文档的总页数。 利用AI. 分别尝试了chatGPT, 文心一言, github copilot,Kimi 等工具,给出来的答案都不尽如人意。 给的最多的查询方式就是下面这种。 这个…

代码随想录阅读笔记-二叉树【翻转二叉树】

题目 翻转一棵二叉树。 思路 如果要从整个树来看,翻转还真的挺复杂,整个树以中间分割线进行翻转,如图: 可以发现想要翻转它,其实就把每一个节点的左右孩子交换一下就可以了。 关键在于遍历顺序,前中后序应…

如何通过vscode连接到wsl

下载wsl扩展 远程连接模式

SQL Server 实验二:数据库视图的创建和使用

目录 第一关 相关知识 什么是表 操作数据表 创建数据表 插入数据 修改表结构 删除数据表 编程要求 第一关实验代码: 第二关 相关知识 视图是什么 视图的优缺点 视图的优点 视图的缺点 操作视图 创建视图 通过视图向基本表中插入数据 通过视图修改基本表的…

Selenium元素定位之页面检测技巧

在进行web自动化测试的时候进行XPath或者CSS定位,需要检测页面元素定位是否正确,如果用脚本去检测,那么效率是极低的。 一般网上推选装额外的插件来实现页面元素定位检测 如:firebug。 其实F12开发者工具就能直接在页面上检测元…

JavaScript new一个对象的详细过程

JavaScript new一个对象的详细过程 new实现过程 new实现原理 new手写实现 实现过程/原理 开辟一块内存,创建一个空对象 执行构造函数对这个空对象进行构造 给空对象添加__proto__属性 调用函数改变this指向 最后返回this指向的新对象(如果是引用类型则返…

C# OpenCvSharp MatchTemplate 多目标匹配

目录 效果 项目 代码 下载 效果 项目 代码 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using OpenCvSharp; using O…

Collection集合 --java学习笔记

Collection Collection是单列集合的祖宗,它规定的方法(功能)是全部单列集合都会继承的 List系列集合:List系列集合:ArrayList、LinkedList --java学习笔记-CSDN博客 Set系列集合:Set系列集合:…

ARMv9新特性:虚拟内存系统架构 (VMSA) 的增强功能

快速链接: 【精选】ARMv8/ARMv9架构入门到精通-[目录] 👈👈👈 权限索引 2022 ARM引入了一种新的控制内存权限方法。 不再是直接在转换表条目 (TTE) 中编码权限,而是使用 TTE 中的字段来索引寄存器中指定的权限数组。这种间接提供…

.NET CORE 分布式事务(三) DTM实现Saga及高并发下的解决方案

目录(结尾附加项目代码资源地址) 引言: 1. SAGA事务模式 2. 拆分为子事务 3. 失败回滚 4. 如何做补偿 4.1 失败的分支是否需要补偿 5. 异常 6. 异常与子事务屏障 6.1 NPC的挑战 6.2 现有方案的问题 6.3 子事务屏障 6.4 原理 7. 更多高级场景 7.1 部分…