Python 爬取 3 万条游戏评分数据,找到了程序员最爱玩的游戏(附代码)

本文主要是介绍Python 爬取 3 万条游戏评分数据,找到了程序员最爱玩的游戏(附代码),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本文爬取了游戏网站上所有可见的游戏评分数据进行分析,全文包括以下几个部分:
 

  • 数据获取
  • 数据总览
  • 游戏类型分析
  • 游戏平台分析
  • 游戏名称分析
  • 高分游戏汇总
  • 代码汇总



全文数据获取及分析均基于python3.6完成。

数据获取过程
 


页面内一条游戏数据展示如下,显示出来的一条评论是游戏的点赞数最多的评论,我们分析需要的数据包括游戏名称、游戏类型、游戏平台、游戏评分、游戏评价人数及最热评价。
 


浏览器中按F12打开开发者工具,选择NetWork-XHR,页面拉倒底部点显示更多,可以看到获取到的数据文件。
 


右键打开后看到是游戏的信息,通过改变网址中more后面的数字,可以获取更多数据。但尝试之后发现,每次可以获取20条数据,more后面的数字最大可以设置为500,超过500后获取不到数据,也就是说最多能获取10000条数据,但底部total字段显示总的游戏数据有52049条。
 


所以为了获取更多数据,我们分类型爬取数据,每次选中一个类型,重复上述过程,可以得到数据,观察后发现每个类型下的游戏数据都不超过10000条,这样每个类型的数据都能全部获取,最后把所有数据拼到一起即可。
 


以动作类游戏为例:

多尝试几次之后能看出规律:genres后面是游戏类型,动作类型对应的genres=1,platforms后面是平台类型,q后面的是游戏名称关键字,sort后面是排序方式,默认是按评分排序,more后面是页码。

所以我们需要知道每个游戏类型对应的数字,可以在开发者工具中选Element,用小箭头进行定位,快速获取所有游戏类型对应的数字:
 


定位后发现,每种类型包含在一个class内,动作类型对应的数字在values里。
 


依次点开每个class,获取每个类型对应的数字,整理如下:

{1:"动作",5:"角色扮演",41:"横版过关",4:"冒险",48:"射击",32:"第一人称射击",2:"策略",18:"益智",7:"模拟",3:"体育",6:"竞速",9:"格斗",37:"乱斗/清版",12:"即时战略",19:"音乐/旋律"}

之后就可以用python中的request+json包循环获取数据了,代码附在最后。爬到的一条游戏数据样式如下:
 


需要的数据包括:
 

  • n_ratings:评分人数
  • platforms:平台
  • rating:评分
  • star:星级
  • title:游戏名称
  • content:最热评论



游戏类型因为已经我们已经分类型爬取,所以每次爬完之后用代码加上对应的类型即可,但能看到一个游戏可能对应多种类型,或者在多个平台上同时发布,所以在后面的分析中需要处理,其他字段分析中用不到。

数据总览

最终爬下来数据有31574条,还是没拿到所有5万条,这已经是最大可见数据条数了,数据样式如下:
 


genres是网站上给的类型,type是爬取过程中加上去的类型,后文的分析都用type。

简单统计后发现,31574条数据中有17751条数据都是没有评分的,此外,由于一种游戏可能属于多个类别,所以一部分游戏是重复出现的,只有type不同。

首先对数据整体做一个统计描述,对于没有评分的数据采用两种方法处理,视为评分为0和删除数据。

视为评分为0时:
 


删除没有评分的数据:
 


两幅图的5个变量(从左往右、从上至下)均为:星级、评分、评分人数、游戏名称长度、游戏发行平台数,加入游戏名称长度和发行平台数是想探究游戏名称的长度以及发行的平台数是否和游戏评分有一定的关系。

从这两幅分布图能得到一些结论:
 

  • 星级(star)和评分(rating)是严格单调关系的,星级是分级靠档后的评分,所以之后的分析中只考虑星级不考虑评分。
  • 两种评分处理方法下,各变量的分布基本不变,大部分游戏评分集中在7.5左右,评分跟发行平台数、游戏名称长度关系不是非常明显。



游戏类型分析

各类型游戏数:

豆瓣给出的游戏共有15类,各类型游戏数统计如下:
 


动作、冒险、角色扮演、益智、策略类的游戏数量排到前5,第一人称射击、即时战略、音乐、乱斗/清版、射击类排到后5。

豆瓣把第一人称射击、射击分成两类,乱斗跟冒险、动作的区别似乎不是很大?这里不是很理解。

不过射击类的游戏模式太过单一,数量确实比较少,高质量的射击游戏不外乎这两年火起来的吃鸡游戏,还有很早之前的CS系列。
 


而动作、冒险、角色扮演类的游戏从世界观设定、剧情设计上都可以有很多新意,时不时会有一些让人眼前一亮的新作品,也很容易做成一个系列。
 


各类型游戏平均评分人数:

评分人数最多的是第一人称射击类游戏,冒险、即时战略类也较多。
 


各类型游戏均分:

各类型游戏的均分如下,无评分视为0时,由于各种游戏数量的差别,导致游戏数较少的类型平均分更高,但删掉无评分数据后,各种类型的评分基本是持平的,在7.5分上下波动。
 


总体来看,各种类型游戏的平均质量基本是一样的,只是各种类型的用户基数差别大一些。

游戏类型关联分析:

之前提到,一个游戏可能属于多个类别,比如仙剑同时属于角色扮演和冒险。对所有的游戏类别进行交叉分析,统计同时属于两个类别的游戏个数,结果如下:
 


可以看到,动作+冒险,角色扮演+动作/冒险、横版过关+动作/冒险、益智+冒险组合的游戏都是非常多的,动作、冒险大概是万能类别了。

音乐旋律、竞速类的游戏跟其他类别交叉几乎没有,这两种类型游戏形式比较单一,大部分都是拼手速操作,各种游戏同质性比较高。侠盗飞车是其中少有的融合了动作冒险的经典竞速类游戏,但当年玩罪恶都市的快感似乎跟竞速没啥关系。
 


游戏平台分析

游戏平台类型非常多,整体分为手机、电脑、游戏机三类,游戏机大部分是任天堂(Wii,GB)、索尼(PS)、微软(Xbox)的产品。
 


之前提到,一款游戏可能同时在多个平台上发布,这给分析过程带来了一定难度,观察后发现,豆瓣的平台分布是越靠前的平台越大众化,所以对于有多个平台的游戏,取第一个平台,视为他的主要发布平台进行分析。

各平台游戏数:

鉴于平台数太多,我们把所有游戏数目小于100的平台汇总,记为“其他”,各个平台游戏数分布如下:
 


PC游戏数超过总数的50%,除此外,大部分游戏在iphone,PS2,PS3上,没有Android的原因在于豆瓣上对于游戏平台把iphone放在Android前面,大部分手游是在这两个操作系统上同时发布的,之前的处理方法导致Android数目非常少归到了“其他”中去。

各平台均分:
 


删除无评分数据游戏后,各平台均分基本一致。其中均分最高的GB是任天堂1989年推出的Game Boy游戏机,GBA是任天堂2001年推出的Game Boy Advanced游戏机。你可能没有用过这两款设备,但当中的经典游戏你一定玩过。
 


各平台平均评分人数:
 


各平台评分总人数来说,PC占据绝对优势,但平均人均数来看,人数最多的是PS4和Nintendo Switch。

游戏名称分析

一个有意思的问题是,游戏都是怎样命名的呢?有没有什么规律?

爬取下来的游戏名称中大部分同时包含中文、英文,这里我们只分析中文,将所有游戏名称拼到一起用正则提取其中的中文,去掉长度为1的词,和词频小于10的词,对剩下的高频词按词频做词云如下:
 


词语能反映出游戏的世界观,大部分的游戏会用到战争、战士、传奇、联盟、幻想这样一些虚构的有奇幻色彩的词语,同时也不乏三国、火影等等一些源于历史、动漫、小说、电影作品的词。还有一些开门见山直接说明游戏形式的词语,比如迷宫、格斗、大战、足球等等。

高分游戏汇总

对游戏的整体分析只是统计分析的需要,但对一个游戏迷来说,只需要告诉他哪些游戏好就ok了,不好的游戏并不关注,我们提取所有游戏中评分超过9.5的部分,游戏类型分布如下:
 


考虑到评分人数太少时,手机号出售平台评分结果不一定具有代表性,所以我们只选择其中评分人数超过100的部分,共84款游戏汇总如下,看看有没有你玩过or你想玩的呢?


代码汇总

爬虫代码:
 

  1. # -*- coding: utf-8 -*-
  2. import urllib
  3. import requests
  4. from fake_useragent import UserAgent
  5. import json
  6. import pandas as pd
  7. import time
  8. import datetime
  9. import os
  10. # 发送get请求
  11. """
  12. genres : 游戏类别
  13. n_ratings: 评分人数
  14. platforms: 平台
  15. rating : 评分
  16. content : 最热评论
  17. star : 星数
  18. title : 游戏名称
  19. """
  20. def getDoubanGame(genres):
  21.     id_all1 = {1:"动作",5:"角色扮演",41:"横版过关",4:"冒险",48:"射击",32:"第一人称射击",
  22.     2:"策略",18:"益智",7:"模拟",3:"体育",6:"竞速",9:"格斗",37:"乱斗/清版",12:"即时战略",
  23.     19:"音乐/旋律"}
  24.     comment_api = 'https://www.douban.com/j/ilmen/game/search?genres={}&platforms=&q=&sort=rating&more={}'
  25.     headers = { "User-Agent": UserAgent(verify_ssl=False).random}
  26.     response_comment = requests.get(comment_api.format(genres,1),headers = headers)
  27.     json_comment = response_comment.text
  28.     json_comment = json.loads(json_comment)
  29.     col = ['name','star','rating','platforms','n_ratings','genres','content']
  30.     dataall = pd.DataFrame()
  31.     num = json_comment['total']
  32.     print('{}类别共{}个游戏,开始爬取!'.format(id_all1[genres],num))
  33.     i = 0
  34.     while i < num:
  35.         if i == 0:
  36.             s = 1
  37.         else:
  38.             s = json_comment['more']
  39.         response_comment = requests.get(comment_api.format(genres,s),headers = headers)
  40.         json_comment = response_comment.text
  41.         json_comment = json.loads(json_comment)        
  42.         n = len(json_comment['games'])
  43.         datas = pd.DataFrame(index = range(n),columns = col)
  44.         for j in range(n):        
  45.             datas.loc[j,'name'] = json_comment['games'][j]['title']
  46.             datas.loc[j,'star'] = json_comment['games'][j]['star']
  47.             datas.loc[j,'rating'] = json_comment['games'][j]['rating']
  48.             datas.loc[j,'platforms'] = json_comment['games'][j]['platforms']
  49.             datas.loc[j,'n_ratings'] = json_comment['games'][j]['n_ratings']
  50.             datas.loc[j,'genres'] = json_comment['games'][j]['genres']
  51.             datas.loc[j,'content'] = json_comment['games'][j]['review']['content']
  52.             i += 1
  53.         dataall = pd.concat([dataall,datas],axis = 0)
  54.         print('已完成 {}% !'.format(round(i/num*100,2)))
  55.         time.sleep(0.5)
  56.     dataall = dataall.reset_index(drop = True)
  57.     dataall['type'] = id_all1[genres]
  58.     return dataall
  59. id_all = {"动作":1,"角色扮演" :5,"横版过关" :41,"冒险" :4,"射击": 48,"第一人称射击":32,
  60. "策略":2,"益智":18,"模拟":7,"体育":3,"竞速":6,"格斗":9,"乱斗/清版":37,"即时战略":12,"音乐/旋律":19}
  61. id_all1 = {1:"动作",5:"角色扮演",41:"横版过关",4:"冒险",48:"射击",32:"第一人称射击",
  62. 2:"策略",18:"益智",7:"模拟",3:"体育",6:"竞速",9:"格斗",37:"乱斗/清版",12:"即时战略",
  63. 19:"音乐/旋律"}
  64. for i in list(id_all.values()):
  65.     dataall = getDoubanGame(i)
  66.     filename = '游戏类别_' + id_all1[i] +'.xlsx'
  67.     filename = filename.replace('/','')
  68.     dataall.to_excel(filename)
复制代码


数据总览:

  1. dataall['n_platforms'] = dataall.platforms.apply(lambda x:len(str(x).split('/')))
  2. dataall['platform'] =  dataall.platforms.apply(lambda x:str(x).split('/')[0].strip())
  3. sns.pairplot(dataall,diag_kind = 'kde')   
  4. plt.show()
  5. data2 = dataall.dropna()
  6. sns.pairplot(data2,diag_kind = 'kde')   
  7. plt.show()
复制代码


游戏类型分析:

  1. """
  2. 各类型游戏分析
  3. """
  4. # 各类型游戏数
  5. num = len(dataall.name.unique())
  6. result = dataall.groupby('type').count()['name'].reset_index().sort_values('name',ascending = False)
  7. attr = list(result.type)
  8. v  = list(np.round(result.name/num,3))
  9. pie = Pie()
  10. style = Style()
  11. pie_style = style.add(
  12.     label_pos="center",
  13.     is_label_show=True,
  14.     label_text_color=None,
  15.     is_legend_show = False
  16. )
  17. pie.add("",[attr[0],"其他"],[v[0],1-v[0]],radius=[18, 24],center = [10,20],**pie_style)
  18. pie.add("",[attr[1],"其他"],[v[1],1-v[1]],radius=[18, 24],center = [30,20],**pie_style)
  19. pie.add("",[attr[2],"其他"],[v[2],1-v[2]],radius=[18, 24],center = [50,20],**pie_style)
  20. pie.add("",[attr[3],"其他"],[v[3],1-v[3]],radius=[18, 24],center = [70,20],**pie_style)
  21. pie.add("",[attr[4],"其他"],[v[4],1-v[4]],radius=[18, 24],center = [90,20],**pie_style)
  22. pie.add("",[attr[5],"其他"],[v[5],1-v[5]],radius=[18, 24],center = [10,50],**pie_style)
  23. pie.add("",[attr[6],"其他"],[v[6],1-v[6]],radius=[18, 24],center = [30,50],**pie_style)
  24. pie.add("",[attr[7],"其他"],[v[7],1-v[7]],radius=[18, 24],center = [50,50],**pie_style)
  25. pie.add("",[attr[8],"其他"],[v[8],1-v[8]],radius=[18, 24],center = [70,50],**pie_style)
  26. pie.add("",[attr[9],"其他"],[v[9],1-v[9]],radius=[18, 24],center = [90,50],**pie_style)
  27. pie.add("",[attr[10],"其他"],[v[10],1-v[10]],radius=[18, 24],center = [10,80],**pie_style)
  28. pie.add("",[attr[11],"其他"],[v[11],1-v[11]],radius=[18, 24],center = [30,80],**pie_style)
  29. pie.add("",[attr[12],"其他"],[v[12],1-v[12]],radius=[18, 24],center = [50,80],**pie_style)
  30. pie.add("",[attr[13],"其他"],[v[13],1-v[13]],radius=[18, 24],center = [70,80],**pie_style)
  31. pie.add("",[attr[14],"其他"],[v[14],1-v[4]],radius=[18, 24],center = [90,80],**pie_style)
  32. pie.render('各类型游戏数.html')
  33. # 各类型游戏均分
  34. c_schema= [( "乱斗/清版",10),
  35.            ( "体育",10),
  36.            ( "冒险",10),
  37.            ( "动作",10),
  38.            ( "即时战略",10),
  39.            ( "射击",10),
  40.            ( "格斗",10),
  41.            ( "模拟",10),
  42.            ( "横版过关",10),
  43.            ( "益智",10),
  44.            ( "竞速",10),
  45.            ( "第一人称射击",10),
  46.            ( "策略",10),
  47.            ( "角色扮演",10),
  48.            ( "音乐/旋律",10)]
  49. result1 = dataall.rating.fillna(0).groupby(dataall.type).mean().reset_index()
  50. result2 = dataall.rating.dropna().groupby(dataall.dropna().type).mean().reset_index()
  51. v1 = [result1.rating.apply(lambda x:round(x,1)).tolist()]
  52. v2 = [result2.rating.apply(lambda x:round(x,1)).tolist()]
  53. radar = Radar()
  54. radar.config(c_schema)
  55. radar.add("游戏均分(无评分视为0)", v1, is_splitline=True, is_axisline_show=True,is_label_show = True)
  56. radar.add("游戏均分(删除无评分)", v2, label_color=["#4e79a7"],item_color="#f9713c",is_label_show = True)
  57. radar.render('各类型游戏评分.html')
  58. # 各类型游戏评分人数
  59. result1 = dataall.n_ratings.fillna(0).groupby(dataall.type).mean().reset_index()
  60. result2 = dataall.n_ratings.dropna().groupby(dataall.dropna().type).mean().reset_index()
  61. attr = result1.type.tolist()
  62. v1 = np.round(result1.n_ratings.tolist(),1)
  63. v2 = np.round(result2.n_ratings.tolist(),1)
  64. line = Line()
  65. #line.add(x_axis = attr,y_axis = xaxis_type = 'category')
  66. line.add("包含无评分", attr, v1, mark_point=["max"],is_label_show = True)
  67. line.add("不包含无评分", attr, v2, is_smooth=True, mark_point=["max"],is_label_show = True,xaxis_rotate  = 30)
  68. line.render('各类型游戏-评分人数.html')
复制代码


游戏平台分析:

  1. """
  2. 游戏平台分析
  3. """
  4. # 各平台游戏数
  5. num = len(dataall.name.unique())
  6. result = dataall.groupby('platform').count()['name'].reset_index()
  7. name = result.platform.tolist()
  8. value = result.name.tolist()
  9. wordcloud = WordCloud(width=1300, height=620)
  10. wordcloud.add("", name, value, word_size_range=[20, 120])
  11. wordcloud.render('游戏平台.html')
  12. platforms = result.loc[result.name >100,'platform'].tolist()
  13. dataall.platform = dataall.platform.apply(lambda x:x if x in platforms else '其他')
  14. result = dataall.groupby('platform').count()['name'].reset_index().sort_values('name',ascending = False).reset_index(drop = True)
  15. attr = result.platform
  16. v1 = result.name
  17. pie = Pie('各平台游戏数',title_pos = 'center',title_text_size = 20)
  18. pie.add(
  19.     "",
  20.     attr,
  21.     v1,
  22.     radius=[40, 75],center = [50,60],
  23.     label_text_color=None,is_legend_show = False,
  24.     is_label_show=True
  25. )
  26. pie.render('各平台游戏数.html')
  27. # 各平台游戏评分人数
  28. result1 = dataall.n_ratings.fillna(0).groupby(dataall.platform).mean().reset_index()
  29. result2 = dataall.n_ratings.dropna().groupby(dataall.dropna().platform).mean().reset_index()
  30. attr = result1.platform.tolist()
  31. v1 = np.round(result1.n_ratings.tolist(),1)
  32. v2 = np.round(result2.n_ratings.tolist(),1)
  33. line = Line()
  34. #line.add(x_axis = attr,y_axis = xaxis_type = 'category')
  35. line.add("包含无评分", attr, v1, mark_point=["max"],is_label_show = True)
  36. line.add("不包含无评分", attr, v2, is_smooth=True, mark_point=["max"],is_label_show = True,xaxis_rotate  = 70)
  37. line.render('各平台游戏-评分人数.html')
  38. # 各平台游戏均分
  39. result1 = dataall.rating.fillna(0).groupby(dataall.platform).mean().reset_index()
  40. result2 = dataall.rating.dropna().groupby(dataall.dropna().platform).mean().reset_index()
  41. attr = result1.platform.tolist()
  42. v1 = np.round(result1.rating.tolist(),1)
  43. v2 = np.round(result2.rating.tolist(),1)
  44. line = Line()
  45. #line.add(x_axis = attr,y_axis = xaxis_type = 'category')
  46. line.add("包含无评分", attr, v1, mark_point=["max"],is_label_show = True)
  47. line.add("不包含无评分", attr, v2, is_smooth=True, mark_point=["max"],is_label_show = True,xaxis_rotate  = 70)
  48. line.render('各平台游戏-均分.html')
复制代码


游戏名称分析:
 

  1. """
  2. 标题分析
  3. """
  4. # 分词
  5. import re
  6. stopwords = open('中文停用词表(比较全面,有1208个停用词).txt','r').read()
  7. stopwords = stopwords.split('\n')
  8. texts = ''.join(dataall.name.tolist())
  9. texts =''.join(re.findall(r'[\u4e00-\u9fa5]',texts))
  10. result = jieba.cut(texts,cut_all=False)
  11. allwords = [word for word in result if len(word)>1 and word not in stopwords]
  12. result = pd.DataFrame(allwords)
  13. result.columns =['word']
  14. res = result.word.groupby(result.word).count()
  15. res.index.name = 'text'
  16. res = res.reset_index()
  17. res = res.loc[res.word >= 10].reset_index(drop = True)
  18. # 标题词云
  19. name = res.text.tolist()
  20. value = res.word.tolist()
  21. wordcloud = WordCloud(width=1300, height=620)
  22. wordcloud.add("", name, value, word_size_range=[10, 80])
  23. wordcloud.render('游戏名称高频词.html')
复制代码


高分游戏汇总:
 

  1. """
  2. 高rating游戏分析
  3. """
  4. data1 = dataall.loc[dataall.rating>=9.5]
  5. result = data1.groupby('type').count()['name'].reset_index().sort_values('name',ascending = False).reset_index(drop = True)
  6. attr = result.type
  7. v1 = result.name
  8. pie = Pie('9.5分以上游戏',title_pos = 'center',title_text_size = 20)
  9. pie.add(
  10.     "",
  11.     attr,
  12.     v1,
  13.     radius=[40, 75],center = [50,60],
  14.     label_text_color=None,is_legend_show = False,
  15.     is_label_show=True
  16. )
  17. pie.render('高评分游戏-分类型.html')
  18. data1['title'] = data1.name.apply(lambda x:str(x).split(':')[0].split(' ')[0])
  19. # 9.5以上评分,评分人数超过1000
  20. result = data1.loc[data1.n_ratings >= 100,['name','genres','content','platforms','rating','n_ratings']].drop_duplicates().reset_index(drop = True)
  21. result = result.sort_values(by = ['n_ratings','genres'],ascending = False).reset_index(drop = True)
  22. result.to_excel('评分9.5以上游戏.xlsx')

这篇关于Python 爬取 3 万条游戏评分数据,找到了程序员最爱玩的游戏(附代码)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/317559

相关文章

大模型研发全揭秘:客服工单数据标注的完整攻略

在人工智能(AI)领域,数据标注是模型训练过程中至关重要的一步。无论你是新手还是有经验的从业者,掌握数据标注的技术细节和常见问题的解决方案都能为你的AI项目增添不少价值。在电信运营商的客服系统中,工单数据是客户问题和解决方案的重要记录。通过对这些工单数据进行有效标注,不仅能够帮助提升客服自动化系统的智能化水平,还能优化客户服务流程,提高客户满意度。本文将详细介绍如何在电信运营商客服工单的背景下进行

基于MySQL Binlog的Elasticsearch数据同步实践

一、为什么要做 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品、订单等数据的多维度检索。 使用 Elasticsearch 存储业务数据可以很好的解决我们业务中的搜索需求。而数据进行异构存储后,随之而来的就是数据同步的问题。 二、现有方法及问题 对于数据同步,我们目前的解决方案是建立数据中间表。把需要检索的业务数据,统一放到一张M

关于数据埋点,你需要了解这些基本知识

产品汪每天都在和数据打交道,你知道数据来自哪里吗? 移动app端内的用户行为数据大多来自埋点,了解一些埋点知识,能和数据分析师、技术侃大山,参与到前期的数据采集,更重要是让最终的埋点数据能为我所用,否则可怜巴巴等上几个月是常有的事。   埋点类型 根据埋点方式,可以区分为: 手动埋点半自动埋点全自动埋点 秉承“任何事物都有两面性”的道理:自动程度高的,能解决通用统计,便于统一化管理,但个性化定

python: 多模块(.py)中全局变量的导入

文章目录 global关键字可变类型和不可变类型数据的内存地址单模块(单个py文件)的全局变量示例总结 多模块(多个py文件)的全局变量from x import x导入全局变量示例 import x导入全局变量示例 总结 global关键字 global 的作用范围是模块(.py)级别: 当你在一个模块(文件)中使用 global 声明变量时,这个变量只在该模块的全局命名空

使用SecondaryNameNode恢复NameNode的数据

1)需求: NameNode进程挂了并且存储的数据也丢失了,如何恢复NameNode 此种方式恢复的数据可能存在小部分数据的丢失。 2)故障模拟 (1)kill -9 NameNode进程 [lytfly@hadoop102 current]$ kill -9 19886 (2)删除NameNode存储的数据(/opt/module/hadoop-3.1.4/data/tmp/dfs/na

异构存储(冷热数据分离)

异构存储主要解决不同的数据,存储在不同类型的硬盘中,达到最佳性能的问题。 异构存储Shell操作 (1)查看当前有哪些存储策略可以用 [lytfly@hadoop102 hadoop-3.1.4]$ hdfs storagepolicies -listPolicies (2)为指定路径(数据存储目录)设置指定的存储策略 hdfs storagepolicies -setStoragePo

Hadoop集群数据均衡之磁盘间数据均衡

生产环境,由于硬盘空间不足,往往需要增加一块硬盘。刚加载的硬盘没有数据时,可以执行磁盘数据均衡命令。(Hadoop3.x新特性) plan后面带的节点的名字必须是已经存在的,并且是需要均衡的节点。 如果节点不存在,会报如下错误: 如果节点只有一个硬盘的话,不会创建均衡计划: (1)生成均衡计划 hdfs diskbalancer -plan hadoop102 (2)执行均衡计划 hd

【Prometheus】PromQL向量匹配实现不同标签的向量数据进行运算

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi

活用c4d官方开发文档查询代码

当你问AI助手比如豆包,如何用python禁止掉xpresso标签时候,它会提示到 这时候要用到两个东西。https://developers.maxon.net/论坛搜索和开发文档 比如这里我就在官方找到正确的id描述 然后我就把参数标签换过来

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal