使用Spark探索數據

需求分析

使用Spark來探索數據是一種高效處理大規模數據的方法,需要對數據進行加載、清洗和轉換,選擇合適的Spark組件進行數據處理和分析。需求分析包括確定數據分析的目的和問題、選擇合適的Spark應用程序和算法、優化數據處理流程和性能、可視化和解釋分析結果。同時,需要熟悉Spark的基本概念和操作,掌握Spark編程和調優技巧,以確保數據探索的準確性和效率。

系統實現

了解實驗目的

掌握python on Spark的使用理解探索數據的意義和方法,掌握使用Spark探索數據的過程。

1.實驗整體流程分析:

  • 準備環境,安裝Hadoop和Spark組件
  • 準備數據,采用開源movielens數據集
  • 探索用戶數據
  • 探索電影數據
  • 探索電影評級數據

?2.準備數據:

  • 打開終端,啟動Hadoop和Spark集群

  • 下載相關數據集

  • 將數據集解壓到/usr/目錄下

  • 上傳數據至HDFS
#?hadoop?fs?-mkdir?/data
#?hadoop?fs?-ls?/
#?hadoop fs -put /usr/data/u.user /data/u.user
#?hadoop fs -put /usr/data/u.data /data/u.data
#?hadoop fs -put /usr/data/u.genre /data/u.genre
#?hadoop fs -put /usr/data/u.info /data/u.info
#?hadoop fs -put /usr/data/u.item /data/u.item
#?hadoop fs -put /usr/data/u.occupation /data/u.occupation
#?hadoop fs -ls /data

上傳后的HDFS的data目錄結構如圖所示

3.探索用戶數據:

  • 打開終端,執行pyspark命令,進入Spark的python環境

  • 打印首行記錄

運行結果如下

  • 分別統計用戶、性別和職業的個數
#?以'?|?'切分每列,返回新的用戶RDD
user_fields?=?user_data.map(lambda?line:?line.split("|"))
#?統計用戶數
num_users?=?user_fields.map(lambda?fields:?fields[0]).count()
#?統計性別數
num_genders?=?user_fields.map(lambda?fields:?fields[2]).distinct().count()
#?統計職業數
num_occupations?=?user_fields.map(lambda?fields:?fields[3]).distinct().count()
#?統計郵編數
num_zipcodes?=?user_fields.map(lambda?fields:?fields[4]).distinct().count()
#?返回結果
print?("用戶數:?%d,?性別數:?%d,?職業數:?%d,?郵編數:?%d"?%?(num_users,?num_genders,?num_occupations,?num_zipcodes))

運行結果如下

  • 查看年齡分布情況,并用plt.show繪制

  • 查看職業分布情況,同樣繪制圖
#?并行統計各職業人數的個數,返回職業統計RDD后落地
count_by_occupation?=?user_fields.map(lambda?fields:?(fields[3],?1)).reduceByKey(lambda?x,?y:?x?+?y).collect()
#?生成x/y坐標軸
x_axis1?=?np.array([c[0]?for?c?in?count_by_occupation])
y_axis1?=?np.array([c[1]?for?c?in?count_by_occupation])
x_axis?=?x_axis1[np.argsort(x_axis1)]
y_axis?=?y_axis1[np.argsort(y_axis1)]
#?生成x軸標簽
pos?=?np.arange(len(x_axis))
width?=?1.0
ax?=?plt.axes()
ax.set_xticks(pos?+?(width?/?2))
ax.set_xticklabels(x_axis)
#?繪制職業人數條狀圖
plt.xticks(rotation=30)
plt.bar(pos,?y_axis,?width,?color='lightblue')
plt.show()

?

  • 統計各職業人數

4.探索電影數據:

  • 重新打開終端,執行pyspark命令,進入Spark的python環境

  • 打印首行記錄

  • 查看電影的數量

  • 過濾掉沒有發現時間信息的記錄

注意,輸入時需要手動縮進

  • 查看影片的年齡分布并繪圖

5.探索評級數據:

  • 重新打開終端,進入Spark的bin目錄下,執行pyspark命令,進入Spark的python環境

  • 打印首行記錄

  • 查看有多少人參與了評分

  • 統計最高、最低、平均、中位評分,以及平均每個用戶的評分次數
#?以'?|?'切分每列,返回新的用戶RDD
user_fields?=?user_data.map(lambda?line:?line.split("|"))
#?統計用戶數
num_users?=?user_fields.map(lambda?fields:?fields[0]).count()
# 獲取電影數量
num_movies?=?movie_data.count()
#?獲取評分RDD
rating_data?=?rating_data_raw.map(lambda?line:?line.split("\t"))
ratings?=?rating_data.map(lambda?fields:?int(fields[2]))
#?計算最大/最小評分
max_rating?=?ratings.reduce(lambda?x,?y:?max(x,?y))
min_rating?=?ratings.reduce(lambda?x,?y:?min(x,?y))
#?計算平均/中位評分
mean_rating?=?ratings.reduce(lambda?x,?y:?x?+?y)?/?float(num_ratings)
median_rating?=?np.median(ratings.collect())
#?計算每個觀眾/每部電影平均打分/被打分次數
ratings_per_user?=?num_ratings?/?num_users
ratings_per_movie?=?num_ratings?/?num_movies
#?輸出結果
print("最低評分:?%d"?%?min_rating)
print("最高評分:?%d"?%?max_rating)
print("平均評分:?%2.2f"?%?mean_rating)
print("中位評分:?%d"?%?median_rating)
print("平均每個用戶打分(次數):?%2.2f"?%?ratings_per_user)
print("平均每部電影評分(次數):?%2.2f"?%?ratings_per_movie)

  • 統計評分分布情況
#?生成評分統計RDD,并落地
count_by_rating?=?ratings.countByValue()
#?生成x/y坐標軸
x_axis?=?np.array(count_by_rating.keys())
y_axis?=?np.array([float(c)?for?c?in?count_by_rating.values()])
#?對人數做標準化
y_axis_normed?=?y_axis?/?y_axis.sum()
#?生成x軸標簽
pos?=?np.arange(len(y_axis))
width?=?1.0
ax?=?plt.axes()
ax.set_xticks(pos?+?(width?/?2))
ax.set_xticklabels(y_axis)
#?繪制評分分布柱狀圖
plt.bar(pos,?y_axis_normed,?width,?color='lightblue')
plt.xticks(rotation=30)
plt.show()

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/716147.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/716147.shtml
英文地址,請注明出處:http://en.pswp.cn/news/716147.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【嵌入式實踐】【芝麻】【設計篇-3】從0到1給電動車添加指紋鎖:項目整體規劃

0. 前言 該項目是基于stm32F103和指紋模塊做了一個通過指紋鎖控制電動車的小工具。支持添加指紋、刪除指紋,電動車進入P檔等待時計時,計時超過5min則自動鎖車,計時過程中按剎車可中斷P檔狀態,同時中斷鎖車計時。改項目我稱之為“芝…

Pycharm下如何生成exe軟件

第一步 下載pyinstaller pip install pyinstaller 對pyinstaller第二步 使用pyinstaller cmd切換到項目目錄執行命令:pyinstaller --add-data “./templates;templates” 入口文件名.py

【語音識別】- 幾個主流模型

文章目錄 1. Wav2Vec 2.02. Whisper2. WeNet1. Wav2Vec 2.0 由Facebook AI Research(FAIR)于2020年提出的在語音方向里具有一定影響力的預訓練模型。 論文地址:https://arxiv.org/pdf/2006.11477.pdf 項目地址:https://github.com/pytorch/fairseq 訓練數據:62萬小時未…

基于Mahout實現K-Means聚類

需求分析 需要對數據集進行預處理,選擇合適的特征進行聚類分析,確定聚類的數量和初始中心點,調用Mahout提供的K-Means算法進行聚類計算,評估聚類結果的準確性和穩定性。同時,需要對Mahout的使用和參數調優進行深入學習…

頂會ICLR2024論文Time-LLM:基于大語言模型的時間序列預測

文青松 松鼠AI首席科學家、AI研究院負責人 美國佐治亞理工學院(Georgia Tech)電子與計算機工程博士,人工智能、決策智能和信號處理方向專家,在松鼠AI、阿里、Marvell等公司超10年的技術和管理經驗,近100篇文章發表在人工智能相關的頂會與頂刊…

Cloud整合Zookeeper代替Eureka

微服務間通信重構與服務治理筆記-CSDN博客 Zookeeper是一個分布式協調工具,可以實現注冊中心功能 安裝Zookeeper 隨便 就用最新版本吧 進入Zookeeper 包目錄 cd /usr/local/develop/ 解壓 tar -zxvf apache-zookeeper-3.9.1-bin.tar.gz -C /usr/local/develop 進入配置文件…

uniapp 獲取頁面來源

獲取當前頁面棧的實例,以數組形式按棧的順序給出,數組中的元素為頁面實例,第一個元素為首頁,最后一個元素為當前頁面。 let pages getCurrentPages(); if (pages.length > 1) { // 若頁面棧長度大于1則表示不止一個頁面被打開…

在 JavaScript 中用 var, let, 以及 const 有什么差別?什么時候該用哪個?

「在 JavaScript 中用 var, let, 以及 const 有什么差別?」是在前端、JavaScript 面試中常見的考題。在面試時可以先大方向地列點說出異同之處,然后再針對每一個點進行深入說明。以下是以第一人稱撰寫的參考擬答。 var, let, 以及 const 都是在 JavaScript 用來做變數宣告的…

前端導入導出

1、將后端excel二進制文件導出excel下載 import { read, utils, writeFileXLSX } from "xlsx";const useExportExcel (excelData: string, fileName: string) > {const wb read(excelData);const ws wb.Sheets[wb.SheetNames[0]];// 從工作表生成數據行const …

Android 將圖片網址url轉化為bitmap

1. 圖片網址url轉化為bitmap 1.1. 方法一 通過 HttpURLConnection 請求 要使用一個線程去訪問,因為是網絡請求,這是一個一步請求,不能直接返回獲取,要不然永遠為null,在這里得到BitMap之后記得使用Hanlder或者EventBu…

React之useState hook

實現useState js實現一個useState,簡單的原理就是賦值然后更新渲染,大概偽代碼如下: function useState(initValue) {let value initValue;function setValue(v) {if (typeof v "function") {value v(initValue);} else {value…

StarRocks實戰——首汽約車實時數倉實踐

目錄 前言 一、引入背景 二、OLAP引擎選型 三、架構演進 四、實時數倉構建 五、業務實踐價值未來規劃 原文大佬的這篇首汽約車實時數倉實踐有借鑒意義,這里摘抄下來用作學習和知識沉淀。 前言 首汽約車(以下簡稱“首約”)是首汽集團打造…

物體檢測-系列教程20:YOLOV5 源碼解析10 (Model類前向傳播、forward_once函數、_initialize_biases函數)

😎😎😎物體檢測-系列教程 總目錄 有任何問題歡迎在下面留言 本篇文章的代碼運行界面均在Pycharm中進行 本篇文章配套的代碼資源已經上傳 點我下載源碼 14、Model類 14.2 前向傳播 def forward(self, x, augmentFalse, profileFalse):if augm…

MySQL 8.0 架構 之錯誤日志文件(Error Log)(2)

文章目錄 MySQL 8.0 架構 之錯誤日志文件(Error Log)(2)MySQL錯誤日志文件(Error Log)錯誤日志相關參數log_errorlog_error_services過濾器(Filter Error Log Components)寫入/接收器…

Vue+SpringBoot打造大學計算機課程管理平臺

目錄 一、摘要1.1 項目介紹1.2 項目錄屏 二、功能模塊2.1 實驗課程檔案模塊2.2 實驗資源模塊2.3 學生實驗模塊 三、系統設計3.1 用例設計3.2 數據庫設計3.2.1 實驗課程檔案表3.2.2 實驗資源表3.2.3 學生實驗表 四、系統展示五、核心代碼5.1 一鍵生成實驗5.2 提交實驗5.3 批閱實…

131. 分割回文串(力扣LeetCode)

文章目錄 131. 分割回文串題目描述回溯代碼 131. 分割回文串 題目描述 給你一個字符串 s,請你將 s 分割成一些子串,使每個子串都是 回文串 。返回 s 所有可能的分割方案。 回文串 是正著讀和反著讀都一樣的字符串。 示例 1: 輸入&#xf…

Android 架構MVI、MVVM、MVC、MVP

目錄 一、MVC(Model-View-Controller) 二、 MVP(Model-View-Presenter) 三. MVVM(Model-View-ViewModel) 四. MVI(Model-View-Intent) 五.MVI簡單實現 先簡單了解一下MVC、MVP和…

索引使用規則6——單列索引聯合索引

1、單列索引 單列索引:即一個索引只包含單個列 舉個例子 1.1、給phone和那么建立索引 create index index_name on tb_qianzhui(name); create index index_phone on tb_qianzhui(phone);1.2、查詢發現可能的索引有好幾個,但是最終選擇了phone的索引…

軟考 系統分析師系列知識點之詳細調查(2)

接前一篇文章:軟考 系統分析師系列知識點之詳細調查(1) 所屬章節: 第10章. 系統分析 第2節. 詳細調查 在系統規劃階段,通過初步調查,系統分析師已經對企業的組織結構、系統功能等有了大致的了解。但是&…

蘿卜大雜燴 | 提高數據科學工作效率的 8 個 Python 庫

本文來源公眾號“蘿卜大雜燴”,僅用于學術分享,侵權刪,干貨滿滿。 原文鏈接:提高數據科學工作效率的 8 個 Python 庫 在進行數據科學時,可能會浪費大量時間編碼并等待計算機運行某些東西。所以我選擇了一些 Python 庫…