主頁 >  其他 > 利用機器學習模型對PySpark流資料進行預測

利用機器學習模型對PySpark流資料進行預測

2020-09-18 04:02:34 其他

作者|LAKSHAY ARORA
編譯|VK
來源|Analytics Vidhya

概述

  • 流資料是機器學習領域的一個新興概念

  • 學習如何使用機器學習模型(如logistic回歸)使用PySpark對流資料進行預測

  • 我們將介紹流資料和Spark流的基礎知識,然后深入到實作部分

介紹

想象一下,每秒有超過8500條微博被發送,900多張照片被上傳到Instagram上,超過4200個Skype電話被打,超過78000個谷歌搜索發生,超過200萬封電子郵件被發送(根據互聯網實時統計),

我們正在以前所未有的速度和規模生成資料,在資料科學領域作業真是太好了!但是,隨著大量資料的出現,同樣面臨著復雜的挑戰,

主要是,我們如何收集這種規模的資料?我們如何確保我們的機器學習管道在資料生成和收集后繼續產生結果?這些都是業界面臨的重大挑戰,也是為什么流式資料的概念在各組織中越來越受到重視的原因,

增加處理流式資料的能力將大大提高你當前的資料科學能力,這是業界急需的技能,如果你能掌握它,它將幫助你獲得下一個資料科學的角色,

因此,在本文中,我們將了解什么是流資料,了解Spark流的基本原理,然后研究一個與行業相關的資料集,以使用Spark實作流資料,

目錄

  1. 什么是流資料?

  2. Spark流基礎

    1. 離散流

    2. 快取

    3. 檢查點

  3. 流資料中的共享變數

    1. 累加器變數

    2. 廣播變數

  4. 利用PySpark對流資料進行情感分析

什么是流資料?

我們看到了上面的社交媒體資料——我們正在處理的資料令人難以置信,你能想象存盤所有這些資料需要什么嗎?這是一個復雜的程序!因此,在我們深入討論本文的Spark方面之前,讓我們花點時間了解流式資料到底是什么,

流資料沒有離散的開始或結束,這些資料是每秒從數千個資料源生成的,需要盡快進行處理和分析,相當多的流資料需要實時處理,比如Google搜索結果,

我們知道,一些結論在事件發生后更具價值,它們往往會隨著時間而失去價值,舉個體育賽事的例子——我們希望看到即時分析、即時統計得出的結論,以便在那一刻真正享受比賽,對吧?

Spark流基礎

Spark流是Spark API的擴展,它支持對實時資料流進行可伸縮和容錯的流處理,

在跳到實作部分之前,讓我們先了解Spark流的不同組件,

離散流

離散流或資料流代表一個連續的資料流,這里,資料流要么直接從任何源接收,要么在我們對原始資料做了一些處理之后接收,

構建流應用程式的第一步是定義我們從資料源收集資料的批處理時間,如果批處理時間為2秒,則資料將每2秒收集一次并存盤在RDD中,而這些RDD的連續序列鏈是一個不可變的離散流,Spark可以將其作為一個分布式資料集使用,

想想一個典型的資料科學專案,在資料預處理階段,我們需要對變數進行轉換,包括將分類變數轉換為數值變數、洗掉例外值等,Spark維護我們在任何資料上定義的所有轉換的歷史,因此,無論何時發生任何錯誤,它都可以追溯轉換的路徑并重新生成計算結果,

我們希望Spark應用程式運行24小時 x 7,并且無論何時出現任何故障,我們都希望它盡快恢復,但是,Spark在處理大規模資料時,出現任何錯誤時需要重新計算所有轉換,你可以想象,這非常昂貴,

快取

以下是應對這一挑戰的一種方法,我們可以臨時存盤計算(快取)的結果,以維護在資料上定義的轉換的結果,這樣,當出現任何錯誤時,我們不必一次又一次地重新計算這些轉換,

資料流允許我們將流資料保存在記憶體中,當我們要計算同一資料上的多個操作時,這很有幫助,

檢查點(Checkpointing)

當我們正確使用快取時,它非常有用,但它需要大量記憶體,并不是每個人都有數百臺擁有128GB記憶體的機器來快取所有東西,

這就引入了檢查點的概念,

檢查點是保存轉換資料幀結果的另一種技術,它將運行中的應用程式的狀態不時地保存在任何可靠的存盤器(如HDFS)上,但是,它比快取速度慢,靈活性低,

當我們有流資料時,我們可以使用檢查點,轉換結果取決于以前的轉換結果,需要保留才能使用它,我們還檢查元資料資訊,比如用于創建流資料的配置和一組DStream(離散流)操作的結果等等,

流資料中的共享變數

有時我們需要為Spark應用程式定義map、reduce或filter等函式,這些函式必須在多個集群上執行,此函式中使用的變數將復制到每個計算機(集群),

在這里,每個集群有一個不同的執行器,我們需要一些東西,可以給我們這些變數之間的關系,

例如,假設我們的Spark應用程式運行在100個不同的集群上,捕獲來自不同國家的人發布的Instagram圖片,我們需要一個在他們的帖子中提到的特定標簽的計數,

現在,每個集群的執行器將計算該集群上存在的資料的結果,但是我們需要一些東西來幫助這些集群進行通信,這樣我們就可以得到聚合的結果,在Spark中,我們有一些共享變數可以幫助我們克服這個問題

累加器變數

用例,比如錯誤發生的次數、空白日志的次數、我們從某個特定國家收到請求的次數,所有這些都可以使用累加器來解決,

每個集群上的執行器將資料發送回驅動程式行程,以更新累加器變數的值,累加器僅適用于關聯和交換的操作,例如,sum和maximum有效,而mean無效,

廣播變數

當我們處理位置資料時,比如城市名稱和郵政編碼的映射,這些都是固定變數,現在,如果任何集群上的特定轉換每次都需要此類資料,我們不需要向驅動程式發送請求,因為這太昂貴了,

相反,我們可以在每個集群上存盤此資料的副本,這些型別的變數稱為廣播變數,

廣播變數允許程式員在每臺機器上快取一個只讀變數,通常,Spark會使用有效的廣播演算法自動分配廣播變數,但如果我們有多個階段需要相同資料的任務,我們也可以定義它們,

利用PySpark對流資料進行情感分析

是時候啟動你最喜歡的IDE了!讓我們在本節中進行寫代碼,并以實際的方式理解流資料,

在本節中,我們將使用真實的資料集,我們的目標是在推特上發現仇恨言論,為了簡單起見,如果推特帶有種族主義或性別歧視情緒,我們說它包含仇恨言論,

因此,任務是將種族主義或性別歧視的推文與其他推文進行分類,我們將使用Tweets和label的訓練樣本,其中label'1'表示Tweet是種族主義/性別歧視,label'0'表示其他,

為什么這個專案與流處理相關?因為社交媒體平臺以評論和狀態更新的形式接收海量流媒體資料,這個專案將幫助我們限制公開發布的內容,

你可以在這里更詳細地查看問題陳述-練習問題:Twitter情感分析(https://datahack.analyticsvidhya.com/contest/practice-problem-twitter-sentiment-analysis/?utm_source=blog&utm_medium=streaming-data-pyspark-machine-learning-model),我們開始吧!

設定專案作業流

  1. 模型構建:我們將建立一個邏輯回歸模型管道來分類tweet是否包含仇恨言論,在這里,我們的重點不是建立一個非常精確的分類模型,而是查看如何使用任何模型并回傳流資料的結果

  2. 初始化Spark流背景關系:一旦構建了模型,我們就需要定義從中獲取流資料的主機名和埠號

  3. 流資料:接下來,我們將從定義的埠添加netcat服務器的tweets,Spark API將在指定的持續時間后接收資料

  4. 預測并回傳結果:一旦我們收到tweet文本,我們將資料傳遞到我們創建的機器學習管道中,并從模型回傳預測的情緒

下面是我們作業流程的一個簡潔說明:

建立Logistic回歸模型的資料訓練

我們在映射到標簽的CSV檔案中有關于Tweets的資料,我們將使用logistic回歸模型來預測tweet是否包含仇恨言論,如果是,那么我們的模型將預測標簽為1(否則為0),

你可以在這里下載資料集和代碼(https://github.com/lakshay-arora/PySpark/tree/master/spark_streaming),

首先,我們需要定義CSV檔案的模式,否則,Spark將把每列的資料型別視為字串,我們讀取資料并檢查:

# 匯入所需庫
from pyspark import SparkContext
from pyspark.sql.session import SparkSession
from pyspark.streaming import StreamingContext
import pyspark.sql.types as tp
from pyspark.ml import Pipeline
from pyspark.ml.feature import StringIndexer, OneHotEncoderEstimator, VectorAssembler
from pyspark.ml.feature import StopWordsRemover, Word2Vec, RegexTokenizer
from pyspark.ml.classification import LogisticRegression
from pyspark.sql import Row

# 初始化spark session
sc = SparkContext(appName="PySparkShell")
spark = SparkSession(sc)
    
# 定義方案
my_schema = tp.StructType([
  tp.StructField(name= 'id',          dataType= tp.IntegerType(),  nullable= True),
  tp.StructField(name= 'label',       dataType= tp.IntegerType(),  nullable= True),
  tp.StructField(name= 'tweet',       dataType= tp.StringType(),   nullable= True)
])
    
  
# 讀取資料集
my_data = https://www.cnblogs.com/panchuangai/p/spark.read.csv('twitter_sentiments.csv',
                         schema=my_schema,
                         header=True)

# 查看資料
my_data.show(5)

# 輸出方案
my_data.printSchema()

定義機器學習管道

現在我們已經在Spark資料幀中有了資料,我們需要定義轉換資料的不同階段,然后使用它從我們的模型中獲取預測的標簽,

在第一階段中,我們將使用RegexTokenizer 將Tweet文本轉換為單詞串列,然后,我們將從單詞串列中洗掉停用詞并創建單詞向量,在最后階段,我們將使用這些詞向量建立一個邏輯回歸模型,并得到預測情緒,

請記住,我們的重點不是建立一個非常精確的分類模型,而是看看如何在預測模型中獲得流資料的結果,

# 定義階段1:標記tweet文本 
stage_1 = RegexTokenizer(inputCol= 'tweet' , outputCol= 'tokens', pattern= '\\W')
# 定義階段2:洗掉停用字
stage_2 = StopWordsRemover(inputCol= 'tokens', outputCol= 'filtered_words')
# 定義階段3:創建大小為100的詞向量
stage_3 = Word2Vec(inputCol= 'filtered_words', outputCol= 'vector', vectorSize= 100)
# 定義階段4:邏輯回歸模型
model = LogisticRegression(featuresCol= 'vector', labelCol= 'label')

設定我們的機器學習管道

讓我們在Pipeline物件中添加stages變數,然后按順序執行這些轉換,將管道與訓練資料集匹配,現在,每當我們有新的Tweet時,我們只需要將其傳遞到管道物件并轉換資料以獲得預測:

# 設定管道
pipeline = Pipeline(stages= [stage_1, stage_2, stage_3, model])

#擬合模型
pipelineFit = pipeline.fit(my_data)

流資料和回傳的結果

假設我們每秒收到數百條評論,我們希望通過阻止發布包含仇恨言論的評論的用戶來保持平臺的干凈,所以,每當我們收到新的文本,我們就會把它傳遞到管道中,得到預測的情緒,

我們將定義一個函式 get_prediction,它將洗掉空白陳述句并創建一個資料框,其中每行包含一條推特,

因此,初始化Spark流背景關系并定義3秒的批處理持續時間,這意味著我們將對每3秒收到的資料進行預測:

#定義一個函式來計算情感
def get_prediction(tweet_text):
	try:
    # 過濾得到長度大于0的tweets
		tweet_text = tweet_text.filter(lambda x: len(x) > 0)
    # 創建一個列名為“tweet”的資料框,每行將包含一條tweet
		rowRdd = tweet_text.map(lambda w: Row(tweet=w))
    # 創建spark資料框
		wordsDataFrame = spark.createDataFrame(rowRdd)
    # 利用管道對資料進行轉換,得到預測的情緒
		pipelineFit.transform(wordsDataFrame).select('tweet','prediction').show()
	except : 
		print('No data')
    
# 初始化流背景關系
ssc = StreamingContext(sc, batchDuration= 3)

# 創建一個將連接到hostname:port的資料流,如localhost:9991
lines = ssc.socketTextStream(sys.argv[1], int(sys.argv[2]))

# 用一個關鍵字“tweet_APP”分割tweet文本,這樣我們就可以從一條tweet中識別出一組單詞
words = lines.flatMap(lambda line : line.split('TWEET_APP'))

# 獲取收到的推文的預期情緒
words.foreachRDD(get_prediction)

#開始計算
ssc.start()             

# 等待結束
ssc.awaitTermination()  

在一個終端上運行程式并使用Netcat(一個實用工具,可用于將資料發送到定義的主機名和埠號),可以使用以下命令啟動TCP連接:

nc -lk port_number

最后,在第二個終端中鍵入文本,你將在另一個終端中實時獲得預測:

視頻演示地址:https://cdn.analyticsvidhya.com/wp-content/uploads/2019/12/final_twitter_sentiment.mp4?_=1

結尾

流資料在未來幾年會增加的越來越多,所以你應該開始熟悉這個話題,記住,資料科學不僅僅是建立模型,還有一個完整的管道需要處理,

本文介紹了Spark流的基本原理以及如何在真實資料集上實作它,我鼓勵你使用另一個資料集或收集實時資料并實作我們剛剛介紹的內容(你也可以嘗試其他模型),

原文鏈接:https://www.analyticsvidhya.com/blog/2019/12/streaming-data-pyspark-machine-learning-model/

歡迎關注磐創AI博客站:
http://panchuang.net/

sklearn機器學習中文官方檔案:
http://sklearn123.com/

歡迎關注磐創博客資源匯總站:
http://docs.panchuang.net/

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/70520.html

標籤:其他

上一篇:使用PCA可視化資料

下一篇:詞袋模型和TF-IDF

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more