• 基于大数据的Pagerank实验设计


    大数据-Pagerank-实验报告
    目录
    大数据-Pagerank-实验报告 1
    (1) 概述 1
    (2) 数据集分析 1
    (3) 程序设计大致流程及关键代码解析 1
    (4) 实验结果 19
    (5) 实验结果分析 23

    (1)概述
    语言:C++。
    分块:4×4,共16块。
    大致过程:读取原始数据wikidata-分块-获取所有网页-初始化PageRank-Map_Reduce执行至收敛-写入数据
    (2)数据集分析
    ①原始数据集wikidata以“[FromNodeID] [ToNodeID]”形式存储,包括了有入度有出度、有入度无出度、有出度无入度等各个类型的结点。
    ②涉及源网页6110个,所有网页点共7115个。
    ③数据集较稀疏,结点间联系不太紧密,可知用矩阵存储空间消耗较大。

    (3)程序设计大致流程及关键代码解析
    1、为【优化稀疏矩阵】,本实验中数据存储使用紧凑表示法(以WebData为类型vector一维数组Data)存储数据。
    struct WebData
    {
    int WebID; //存储源网页号码
    int NumOfOut; //存储源网页的出度
    vector Target; //存储源网页指向的各个目标网页号码
    };

    2、Load()函数将wikidata.txt的数据读入以上数组Data中

    void load()
    {
    	//打开wikidata.txt
    	ifstream infile1;
    	infile1.open("wikidata.txt");
    	assert(infile1.is_open());   //若失败,则输出错误消息,并终止程序运行 
    
    	/*————向Data数组内存数据————*/
    
    	string s; //存放读取行数据
    	string blank = "	";
    	int Web = -1;
    	vector<int> TemporaryTarget;
    
    	while (1)//逐行读取数据
    	{
    		getline(infile1, s);
    
    		if (s == "") //已经跑到最后了,要把最后一个数据存入
    		{
    			WebData save;
    			save.WebID = Web;
    			save.NumOfOut = TemporaryTarget.size();
    			save.Target = TemporaryTarget;
    			Data.push_back(save);
    
    			break;
    		}
    
    
    		int LocBlack = s.find(blank); //空格所在位置
    
    		 //获取当前源网页
    		string NowWeb = s.substr(0, LocBlack);
    		int Now_Web = stoi(NowWeb);
    
    
    		//如果当前源网页和上一个网页号码不一样,则是新的网页
    		if (Now_Web != Web)
    		{
    			//如果现在Data数组不是空的,对上一个源网页的收尾操作,存入Data中
    			if (Web != -1)
    			{
    				WebData save;
    				save.WebID = Web;
    				save.NumOfOut = TemporaryTarget.size();
    				save.Target = TemporaryTarget;
    				Data.push_back(save);
    			}
    
    
    			//对相关数据进行重新初始化
    			TemporaryTarget.clear();
    			Web = Now_Web; //更新当前源网页
    
    			//向临时目标数组中存入第一个数据
    			int leng = s.length();
    			string Tar = s.substr(LocBlack + 1, leng - LocBlack);
    
    			int Targ = stoi(Tar); //第一个数据
    			TemporaryTarget.push_back(Targ); //存入
    
    			continue;
    		}
    
    		//如果当前源网页和上一个网页号码一样,则继续对上一个网页的操作
    		if (Now_Web == Web)
    		{
    			int leng = s.length();
    			string Tar = s.substr(LocBlack + 1, leng - LocBlack);
    
    			int Targ = stoi(Tar); //获取目标网页的号码
    			TemporaryTarget.push_back(Targ); //存入
    
    			continue;
    		}
    
    	}
    
    	infile1.close();
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  • 相关阅读:
    LeetCode(30)长度最小的子数组【滑动窗口】【中等】
    pdf文档怎么压缩小一点?文件方法在这里
    了解什么是架构基本概念和架构本质
    golang gin ShouldBindUri数据绑定: `uri:“id“ binding:“required,uuid“`
    文件的上传和下载
    Java 插入公式到PPT幻灯片
    负载均衡之一致性哈希算法详解
    react中hook 函数的使用
    超高补贴?成都市“蓉欧+”战略鼓励产能转移扶持政策
    四)Stable Diffussion使用教程:图生图
  • 原文地址:https://blog.csdn.net/newlw/article/details/126701810