精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

流數據是一個在機器學習領域蓬勃發展的概念

倩倩 ? 來源:讀芯術 ? 2020-04-15 17:05 ? 次閱讀

概述

流數據是一個在機器學習領域蓬勃發展的概念

學習如何使用PySpark來利用機器學習模型對流數據進行預測

我們將介紹流數據和Spark Streaming的基礎知識,然后深入到實現部分

引言

想象一下——每一秒都有8,500多條推文發布,900多張照片被上傳到Instagram,4,200多個Skype呼叫,78,000多次Google搜索,以及200多萬封電子郵件被發送(數據來自InternetLive Stats)。

我們正在以前所未有的速度和規模生產數據。這是在數據科學領域工作的大好時候!但是有了大量的數據后,接踵而至的是復雜的挑戰。

首要,如何收集大規模的數據?如何確保一旦生成并收集數據,機器學習管道就會繼續產生結果?這些都是業界面臨的重大挑戰,以及為什么流數據的概念在企業中越來越受到關注。

增加處理流數據的能力將極大地擴展當前的數據科學產品投資組合。這是業界急需的技能,若能熟練掌握它,將幫助你擔負起下一個數據科學角色。

因此,在本文中,我們將學習什么是流數據,了解Spark Streaming的基礎知識,然后在一個業界相關的數據集上使用Spark實現流數據。

什么是流數據?

社交媒體產生的數據是驚人的。你敢于想象存儲所有數據需要些什么嗎?這是一個復雜的過程!因此,在深入探討本文的Spark方面之前,先來理解什么是流數據。

流數據沒有離散的開始或結束。這些數據是每秒從數千個數據源中生成的,它們需要盡快進行處理和分析。大量流數據需要實時處理,例如Google搜索結果。

我們知道,在事件剛發生時一些見解會更有價值,而隨著時間的流逝它們會逐漸失去價值。以體育賽事為例——我們希望看到即時分析,即時統計見解,在那一刻真正享受比賽,對吧?

例如,假設你正在觀看一場羅杰·費德勒(Roger Federer)對戰諾瓦克·喬科維奇(Novak Djokovic)的激動人心的網球比賽。

這場比賽兩局打平,你想了解與費德勒的職業平均水平相比,其反手發球的百分比。是在幾天之后看到有意義,還是在決勝局開始前的那一刻看到有意義呢?

Spark Streaming的基礎知識

Spark Streaming是核心Spark API的擴展,可實現實時數據流的可伸縮和容錯流處理。

在轉到實現部分之前,先了解一下Spark Streaming的不同組成部分。

離散流

離散流(Dstream)是一個連續的數據流。對于離散流,其數據流可以直接從數據源接收,也可以在對原始數據進行一些處理后接收。

構建流應用程序的第一步是定義要從中收集數據的數據資源的批處理持續時間。如果批處理持續時間為2秒,則將每2秒收集一次數據并將其存儲在RDD中。這些RDD的連續序列鏈是一個DStream,它是不可變的,可以通過Spark用作一個分布式數據集。

考慮一個典型的數據科學項目。在數據預處理階段,我們需要轉換變量,包括將分類變量轉換為數字變量,創建分箱,去除異常值和很多其他的事。Spark保留了在數據上定義的所有轉換的歷史記錄。因此,無論何時發生故障,它都可以追溯轉換的路徑并重新生成計算結果。

我們希望Spark應用程序7 x 24小時持續運行。并且每當故障發生時,我們都希望它能盡快恢復。但是,在大規模處理數據的同時,Spark需要重新計算所有轉換以防出現故障。可以想象,這樣做的代價可能會非常昂貴。

緩存

這是應對該挑戰的一種方法。我們可以暫時存儲已計算(緩存)的結果,以維護在數據上定義的轉換的結果。這樣,當發生故障時,就不必一次又一次地重新計算這些轉換。

DStreams允許將流數據保留在內存中。當我們要對同一數據執行多種運算時,這很有用。

檢查點

高速緩存在正常使用時非常有用,但是它需要大量內存。并不是每個人都有數百臺具有128 GB內存的計算機來緩存所有內容。

檢查點的概念能夠有所幫助。

檢查點是另一種保留轉換后的數據框結果的技術。它將不時地將正在運行的應用程序的狀態保存在任何可靠的存儲介質(如HDFS)上。但是,它比緩存慢,靈活性也更差。

在擁有流數據時可以使用檢查點。轉換結果取決于先前的轉換結果,并且需要保存以供使用。此外,我們還存儲檢查點元數據信息,例如用于創建流數據的配置以及一系列DStream操作的結果等。

流數據的共享變量

有時候需要為必須在多個集群上執行的Spark應用程序定義諸如map,reduce或filter之類的函數。在函數中使用的變量會被復制到每臺機器(集群)中。

在這種情況下,每個集群都有一個不同的執行器,我們想要一些可以賦予這些變量之間關系的東西。

例如:假設Spark應用程序在100個不同的集群上運行,它們捕獲了來自不同國家的人發布的Instagram圖片。

現在,每個集群的執行者將計算該特定集群上的數據的結果。但是我們需要一些幫助這些集群進行交流的東西,以便獲得匯總結果。在Spark中,我們擁有共享變量,這些變量使此問題得以克服。

累加器變量

用例包括發生錯誤的次數,空白日志的數量,我們從特定國家收到請求的次數——所有這些都可以使用累加器解決。

每個集群上的執行程序將數據發送回驅動程序進程,以更新累加器變量的值。 累加器僅適用于關聯和可交換的運算。例如,對求和和求最大值有用,而求平均值不起作用。

廣播變量

當我們使用位置數據(例如城市名稱和郵政編碼的映射)時,這些是固定變量,是吧?現在,如果每次在任意集群上的特定轉換都需要這種類型的數據,我們不需要向驅動程序發送請求,因為它會太昂貴。

相反,可以在每個集群上存儲此數據的副本。這些類型的變量稱為廣播變量。

廣播變量允許程序員在每臺計算機上保留一個只讀變量。通常,Spark使用高效的廣播算法自動分配廣播變量,但是如果有任務需要多個階段的相同數據,也可以定義它們。

使用PySpark對流數據進行情感分析

是時候啟動你最喜歡的IDE了!讓我們在本節中進行編碼,并以實踐的方式理解流數據。

理解問題陳述

在本節我們將使用真實數據集。我們的目標是檢測推文中的仇恨言論。為了簡單起見,如果一條推文包含帶有種族主義或性別歧視情緒的言論,我們就認為該推文包含仇恨言論。

因此,任務是將種族主義或性別歧視的推文從其他推文中區分出來。我們將使用包含推文和標簽的訓練樣本,其中標簽“1”表示推文是種族主義/性別歧視的,標簽“0”則表示其他種類。

為什么這是一個與主題相關的項目?因為社交媒體平臺以評論和狀態更新的形式接收龐大的流數據。該項目將幫助我們審核公開發布的內容。

設置項目工作流程

1. 模型構建:構建邏輯回歸模型管道,對推文中是否包含仇恨言論進行分類。在這里,我們的重點不是建立一個完全準確的分類模型,而是了解如何在流數據上使用任意模型并返回結果

2. 初始化Spark Streaming的環境:一旦模型構建完成,需要定義獲取流數據的主機名和端口

3. 流數據:接下來,從定義的端口添加來自netcat服務器的推文,SparkStreaming API將在指定的持續時間后接收數據

4. 預測并返回結果:一旦接收到推文,就將數據傳遞到創建的機器學習管道中,并從模型中返回預測的情緒

這是對工作流程的簡潔說明:

訓練數據以建立邏輯回歸模型

我們在一個CSV文件中存儲推文數據及其相應的標簽。使用邏輯回歸模型來預測推文是否包含仇恨言論。如果是,則模型預測標簽為1(否則為0)。你可以參考“面向初學者的PySpark”來設置Spark環境。

可以在這里下載數據集和代碼。

首先,需要定義CSV文件的模式。否則,Spark會將每列數據的類型都視為字符串。讀取數據并檢查模式是否符合定義:

# importing required libraries

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

# initializing spark session

sc = SparkContext(appName=“PySparkShell”)

spark = SparkSession(sc)

# define the schema

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)

])

# read the dataset

my_data = spark.read.csv(‘twitter_sentiments.csv’,

schema=my_schema,

header=True)

# view the data

my_data.show(5)

# print the schema of the file

my_data.printSchema()

定義機器學習管道的各個階段

現在已經將數據保存在Spark數據框中,需要定義轉換數據的不同階段,然后使用它從模型中獲取預測的標簽。

在第一階段,使用RegexTokenizer將推特文本轉換為單詞列表。然后,從單詞列表中刪除停用詞并創建詞向量。在最后階段,使用這些詞向量來構建邏輯回歸模型并獲得預測的情緒。

記住——重點不是建立一個完全準確的分類模型,而是要看看如何在流數據上使用預測模型來獲取結果。

# define stage 1: tokenize the tweet text

stage_1 = RegexTokenizer(inputCol=‘tweet’ , outputCol=‘tokens’, pattern=‘\\W’)

# define stage 2: remove the stop words

stage_2 = StopWordsRemover(inputCol=‘tokens’, outputCol=‘filtered_words’)

# define stage 3: create a word vector of the size 100

stage_3 = Word2Vec(inputCol=‘filtered_words’, outputCol=‘vector’, vectorSize=100)

# define stage 4: Logistic Regression Model

model = LogisticRegression(featuresCol=‘vector’, labelCol=‘label’)

設置機器學習管道

讓我們在Pipeline對象中添加階段,然后按順序執行這些轉換。用訓練數據集擬合管道,現在,每當有了新的推文,只需要將其傳遞給管道對象并轉換數據即可獲取預測:

# setup the pipeline

pipeline = Pipeline(stages= [stage_1, stage_2, stage_3, model])

# fit the pipeline model with the training data

pipelineFit = pipeline.fit(my_data)

流數據和返回結果

假設每秒收到數百條評論,我們希望通過阻止用戶發布仇恨言論來保持平臺整潔。因此,每當我們收到新文本,都會將其傳遞到管道中并獲得預測的情緒。

我們將定義一個函數get_prediction,該函數將刪除空白句子并創建一個數據框,其中每一行都包含一條推文。

初始化Spark Streaming的環境并定義3秒的批處理持續時間。這意味著我們將對每3秒收到的數據進行預測:

# define a function to compute sentiments of the received tweets

defget_prediction(tweet_text):

try:

# filter the tweets whose length is greater than 0

tweet_text = tweet_text.filter(lambda x: len(x) 》0)

# create a dataframe with column name ‘tweet’ and each row will contain the tweet

rowRdd = tweet_text.map(lambda w: Row(tweet=w))

# create a spark dataframe

wordsDataFrame = spark.createDataFrame(rowRdd)

# transform the data using the pipeline and get the predicted sentiment

pipelineFit.transform(wordsDataFrame).select(‘tweet’,‘prediction’).show()

except :

print(‘No data’)

# initialize the streaming context

ssc = StreamingContext(sc, batchDuration=3)

# Create a DStream that will connect to hostname:port, like localhost:9991

lines = ssc.socketTextStream(sys.argv[1], int(sys.argv[2]))

# split the tweet text by a keyword ‘TWEET_APP’ so that we can identify which set of words is from a single tweet

words = lines.flatMap(lambda line : line.split(‘TWEET_APP’))

# get the predicted sentiments for the tweets received

words.foreachRDD(get_prediction)

# Start the computation

ssc.start()

# Wait for the computation to terminate

ssc.awaitTermination()

在一個終端上運行該程序,然后使用Netcat(用于將數據發送到定義的主機名和端口號的實用工具)。你可以使用以下命令啟動TCP連接:

nc -lk port_number

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

完美!

結語

流數據在未來幾年只會越來越熱門,因此應該真正開始熟悉這一主題。請記住,數據科學不只是建立模型——整個流程都需要關注。

本文介紹了SparkStreaming的基礎知識以及如何在真實的數據集上實現它。我鼓勵大家使用另一個數據集或抓取實時數據來實現剛剛介紹的內容(你也可以嘗試其他模型)。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 數據
    +關注

    關注

    8

    文章

    6890

    瀏覽量

    88826
  • 機器學習
    +關注

    關注

    66

    文章

    8377

    瀏覽量

    132407
收藏 人收藏

    評論

    相關推薦

    海外儲能市場蓬勃發展,儲能配電表扮演關鍵角色

    ,德國、意大利、日本、美國和澳大利亞是主要市場,占全球累計裝機容量的88%。這一數據不僅反映了戶儲市場的巨大潛力,也揭示了歐美國家在這一領域的領先地位。海外戶儲市場的蓬勃發展,得益于多種因素的共同推動
    的頭像 發表于 11-06 16:02 ?261次閱讀
    海外儲能市場<b class='flag-5'>蓬勃發展</b>,儲能配電表扮演關鍵角色

    制造商利用云技術優化深度學習機器視覺的運行效率

    機器視覺,作為推動中國制造業蓬勃發展的關鍵技術,已在半導體、電子制造、汽車、醫藥及食品包裝等多個領域展現其廣泛應用價值。在此背景下,高工產業研究所(GGII)預測,至2024年,中國機器
    的頭像 發表于 10-22 14:10 ?283次閱讀

    LEM國產替代:芯森傳感器助力中國機器人行業蓬勃發展

    中國機器人行業近年來呈現出蓬勃發展的態勢,2023 年我國機器人產業規模超 200 億元,已連續多年穩坐世界最大機器人消費國地位,中國機器
    的頭像 發表于 10-12 10:57 ?247次閱讀
    LEM國產替代:芯森傳感器助力中國<b class='flag-5'>機器</b>人行業<b class='flag-5'>蓬勃發展</b>

    音圈電機無人機蓬勃發展

    7月10日,中國民航局局長宋志勇國新辦發布會上表示:2024年上半年,我國新注冊無人機超60萬架,較去年年底增長了48%,這一數據顯示我國低空經濟正在步入快速成長的新階段。 而為
    的頭像 發表于 08-14 08:15 ?165次閱讀
    音圈電機無人機<b class='flag-5'>蓬勃發展</b>

    【《時間序列與機器學習》閱讀體驗】+ 了解時間序列

    收到《時間序列與機器學習書,彩色印刷,公式代碼清晰,非常精美。感謝作者,感謝電子發燒友提供了讓我
    發表于 08-11 17:55

    光伏技術蓬勃發展,安富利助力全球能源發展

    全球能源轉型的浪潮中,面對諸多不確定性因素的挑戰,光伏產業的蓬勃發展已成為不可逆轉的趨勢。據國際能源署(IEA)的權威預測,至2030年,全球光伏累計裝機量將躍升至1721吉瓦(GW),并預計2050年達到驚人的4670GW
    的頭像 發表于 07-10 14:48 ?454次閱讀

    遷移學習的基本概念和實現方法

    遷移學習(Transfer Learning)是機器學習領域中的重要
    的頭像 發表于 07-04 17:30 ?1343次閱讀

    機器學習數據分析中的應用

    隨著大數據時代的到來,數據量的爆炸性增長對數據分析提出了更高的要求。機器學習作為種強大的工具,
    的頭像 發表于 07-02 11:22 ?544次閱讀

    多樣性算力產業峰會2024成功舉辦,得瑞領新助力推動產業生態蓬勃發展

    6月18日,“共筑新算力,智啟新未來”多樣性算力產業峰會2024北京成功舉辦。得瑞領新受邀參會并在“智算和高速互聯”論壇帶來主題分享,期待未來與業界同仁道,共同推動智能計算產業的蓬勃發展
    的頭像 發表于 06-20 09:27 ?367次閱讀
    多樣性算力產業峰會2024成功舉辦,得瑞領新助力推動產業生態<b class='flag-5'>蓬勃發展</b>

    我國動力電池產業蓬勃發展,裝車量持續增長

    新能源汽車市場的持續繁榮和動力電池技術進步的雙重推動下,我國動力電池產業正在迎來蓬勃發展的新時代。近日,中國汽車動力電池產業創新聯盟發布的最新數據顯示,5月份我國動力電池裝車量達到了39.9GWh
    的頭像 發表于 06-17 16:35 ?1168次閱讀
    我國動力電池產業<b class='flag-5'>蓬勃發展</b>,裝車量持續增長

    中國SiC功率半導體產業蓬勃發展

    根據TrendForce集邦咨詢的數據報告顯示,中國SiC功率半導體產業中占據領先地位,特別是功率元件業務中達到了42.4%的高占比。這一領域涵蓋了Fabless、IDM以及Fou
    的頭像 發表于 05-08 10:49 ?455次閱讀
    中國SiC功率半導體產業<b class='flag-5'>蓬勃發展</b>

    淺談AI技術SSD控制器中的應用

    當前AI技術蓬勃發展,深度學習、強化學習等技術不斷突破,使得AI圖像識別、語音識別、自然語言處理等領域取得了顯著成果。
    的頭像 發表于 04-20 10:02 ?807次閱讀
    淺談AI技術<b class='flag-5'>在</b>SSD控制器中的應用

    我國 IPv6 蓬勃發展,網絡“高速公路”全面建成

    )支撐了互聯網的蓬勃發展,地址長度為32位,可提供大約40億地址。隨著互聯網的普及與廣泛應用,特別是移動互聯網、云計算、物聯網、工業互聯網的蓬勃發展,傳統的IPv4
    的頭像 發表于 03-29 14:08 ?356次閱讀
    我國 IPv6 <b class='flag-5'>蓬勃發展</b>,網絡“高速公路”全面建成

    華為云 FunctionGraph 函數工作:打破 AIGC 部署困局,釋放企業無限潛能

    Content)這新興領域,借助先進的機器學習技術,內容生成已經取得了顯著的突破,特別是圖像生成方面,其應用已經變得日益廣泛。AIGC
    的頭像 發表于 03-19 22:56 ?450次閱讀
    華為云 FunctionGraph 函數工作<b class='flag-5'>流</b>:打破 AIGC 部署困局,釋放企業無限潛能

    3D機器視覺技術發展迅猛,歐菲光在該領域持續深入布局

    工業領域,3D視覺的潛力巨大且影響深遠,應用范圍不斷擴展。其不僅在擴大質量控制在線檢測、協作機械柔性裝配、倉庫自動化亦或是視覺引導機器人等領域擁有巨大潛力,同時也必將推動相關產業鏈廠
    的頭像 發表于 01-16 10:49 ?864次閱讀