石油和天然氣資產與AWS動作優化,RDS,磚
成功的關鍵是持續良好的決策,和好的決策的關鍵是有好的信息。這種信仰是主要推動力爆炸性的興趣大數據。我們都知道直觀地獲得更多的數據介紹了潛在獲得更好的數據,因此更好的決策,然而更多的數據完全不一定導致更好的決策。我們還必須篩選數據,發現有用的信息。這樣做有效的資本密集型行業尤為重要。
石油和天然氣工業是一個asset-intensive商業資本資產從鑽井平台海上平台和油井管道、液化天然氣接收站,和煉油廠(圖1)。這些資產是昂貴的設計、構建、運行和維護。Beplay体育安卓版本財務報表分析的五個特大(英國石油公司、康菲石油公司埃克森美孚、殼牌、總)表明,植物,財產和設備平均占總資產的51%。有效地管理這些資產需要石油和天然氣工業利用先進的機器學習和分析在極端的大量數據,在批處理和實時。Apache火花是適合處理這種類型的工作負載和構建Apache火花磚是理想的平台解決方案。Beplay体育安卓版本
在這個博客中,我們將解決一個典型的問題在石油和天然氣工業—資產優化。我們將演示一個解決方案有三個組件:
- AWS運動流實時數據;
- AWS RDS存儲曆史數據;
- 磚來處理數據從RDS和運動來確定最優資產水平。
背景對資產優化
“資產”是指有形商品使用的業務生成收入——原材料、設備等業務操作消耗(即資產。,穿著一件設備),必須補充他們繼續創收。補充的時機和數量估計是資產優化的核心,因為昂貴的錯誤:如果業務收入就停止流動耗盡了原材料,而多餘的庫存持有成本。理想情況下,資產優化準確確定正確的資產水平接近實時消費數據分析的基礎上。我們的目標是精確地估算股票將用於訂單到達的時間定位精度。
資產優化的例子
在資本密集型的石油和天然氣行業,每一個小時的低效資產操作或非計劃停機時間花費數百萬。在當前物聯網(物聯網)大數據時代,資產優化關注持續監控資產的關鍵操作特征和應用先進的機器學習資產性能和最大限度地減少計劃外停機。這就是大數據和預先分析。博客的其餘部分,我們將看看一個發電裝置的例子,我們實時監控資產米和模型關鍵測量來確定最優資產運作。
我們模型的擬合分布的有限我們交貨時間數據,然後抽樣分布。擬合分布是最慢的部分,因為它必須完成數值使用馬爾可夫鏈蒙特卡羅(密度),100000年我們的資產,這需要一個循環迭代不能並行執行。整個過程必須為每個材料的數據集,根據植物可以3000 +。每一個材料都可以獨立分析和並行。
與AWS讓我們看看我們能做這個動作,RDS,磚在一起(注意:您還可以看到在磚筆記本的示例代碼)。
流與AWS運動傳感器讀數
步驟1:導入適當的動作庫。
這個例子假定火花2.0.1 (Scala 2.11)。在這個特別的筆記本,確保你有附加Maven依賴spark-streaming-kinesis火花的相同版本的集群和相應kinesis-client圖書館。
步驟2:配置您的運動流。
/ / = = =配置來控製應用程序的流程= = =val stopActiveContext =真正的/ /“true”=停止如果任何現有StreamingContext運行;/ /“false”=不要停止,讓它安靜的運行,但最新的代碼可能不被使用/ / = = =配置引發流= = =val batchIntervalSeconds =10val eventsPerSecond =1000年/ /仿真信號源/ /驗證集群是1.4.0 +附加火花需要(sc.version.replace (“。”,”“)。toInt > =140年)
第三步:定義函數,使用流。
這個函數使用一個虛擬流,我們已經創造了一個為了示威運動。我們使用的數據,後者是上演了JSON文件。
進口scala.util.Random進口org.apache.spark.streaming.receiver._類DummySource(ratePerSec:Int)擴展接收機(字符串)(StorageLevel。MEMORY_AND_DISK_2){defonStart(){/ /啟動線程接收數據連接新線程(“虛擬源”){覆蓋def運行(){接收()}}.start ()}def原(){/ /沒有多大關係的線程調用接收()/ /本身是為了阻止isStopped()返回false}/ * *創建一個套接字連接,接收數據,直到停止接收機* /私人def收到(){而(! isStopped ()) {存儲(“我是一個虛擬源”+ Random.nextInt (10))thread . sleep ((1000年。toDouble / ratePerSec) .toInt)}}}
在AWS RDS存儲曆史數據
讓我們連接到一個關係數據庫,看看我們的主數據,選擇我們想要的電廠來創建我們的第一個模型。我們將使用紅移我們的數據庫,但對於連接的步驟基本上是相同的任何數據庫。我們的模擬,紅移是關於資產主數據存儲的地方。在現實世界中,這些數據可以存儲在關係數據庫中。
步驟1:創建一個DataFrame整個紅移表
步驟2:創建一個臨時的觀點
步驟3:選擇和發電廠的視圖列表
我們可以使用ANSI SQL來探索我們的主數據和決定哪些資產我們想使用我們的初步分析。
監控和異常檢測與磚
步驟1:讓我們加載數據
源測量數據的JSON數據。在現實世界中,這將是直接從動作或另一個流媒體技術為我顯示上麵的仿真示例。
加載了數據從JSON文件:
mounts_list = [{“桶”:“databricks-corp-training / structured_streaming /設備”,“mount_folder”:“/ mnt / sdevices”}]為mount_point在mounts_list:桶= mount_point [“桶”]mount_folder = mount_point [“mount_folder”]試一試:dbutils.fs.ls (mount_folder)dbutils.fs.unmount (mount_folder)除了:通過最後:#如果MOUNT_FOLDER不存在dbutils.fs.mount (“s3a: / /”+ ACCESSY_KEY_ID +”:“+ SECRET_ACCESS_KEY +“@”+桶,mount_folder)
JSON定義一個模式設備數據,以便引發沒有推斷出:
進口org.apache.spark.sql.types._//獲取JSON設備信息上傳成Filestore的val jsonFile=“dbfs: / mnt / sdevices /”val jsonSchema=新StructType ()。添加(“battery_level LongType)。添加(“c02_level LongType)。添加(“cca3 StringType)。添加(“cn”StringType)。添加(“device_id LongType)。添加(“device_type StringType)。添加(“信號”,LongType)。添加(“知識產權”,StringType)。添加(“臨時”LongType)。添加(“時間戳”,TimestampType)
從安裝目錄中讀取JSON文件使用指定的模式。提供模式避免火花來推斷,因此使更快的讀操作:
val devicesDF =火花.read. schema (jsonSchema). json (jsonFile)
步驟2:讓我們探索我們的數據
顯示器(devicesDF)
步驟3:想象我們的數據
//進口一些SQL總和窗口函數進口org.apache.spark.sql.functions._val staticCountsDF=devicesDF。選擇(“device_type”、“battery_level”)。在哪裏(“信號
步驟4:流處理
讀取流。
val streamingSignalsCountsDF=streamingDevicesDF。選擇(“device_type”、“battery_level”)。在哪裏(“信號
第五步:實時監控流
顯示器(streamingSignalsCountsDF)
第六步:模型和優化的數據資產
我們舉行了一些傳感器數據作為一個CSV。在現實世界中,你會讀到這上麵所示的流和我。讓我們創建一個臨時表中,我們將使用分析。
sqlContext.read。格式(“csv”).option (“頭”,“真正的”).option (“分隔符”,“t \”).option (“inferSchema”,“真正的”).load (“dbfs: / databricks-datasets /發電廠/數據/”).createOrReplaceTempView (“power_plant_sf”)
下一步是準備數據。因為所有這些數據是數字和一致的今天對我們來說這是一個簡單的任務。我們將需要轉換的預測功能列使用的特征向量org.apache.spark.ml.feature.VectorAssembler
。的VectorAssembler
將是我們毫升管道建設的第一步。
進口org.apache.spark.ml.feature.VectorAssembler= sqlContext.table (val數據集“power_plant_sf”)val vectorizer =新VectorAssembler ().setInputCols (數組(“在”,“V”,“美聯社”,“自”)).setOutputCol (“特征”)
之間的線性相關性並不強大的真空排氣速度和功率輸出,但有一些表麵上的一種模式。現在讓我們模型的數據預測的輸出功率將得到一組傳感器讀數。
/ /首先讓我們堅持20%的數據測試和離開培訓為80%var數組(split20 split80) = dataset.randomSplit (數組(0.20,0.80)、1800009193 l)/ /緩存這些數據集的性能val testSet = split20.cache ()testSet.count ()val trainingSet = split80.cache ()trainingSet.count ()/ / * * * * * * * * *線性回歸模型進口org.apache.spark.ml.regression.LinearRegression進口org.apache.spark.ml.regression.LinearRegressionModel進口org.apache.spark.ml.Pipeline/ /初始化我們的線性回歸的學習者val lr =新LinearRegression ()/ /現在我們設置參數的方法lr.setPredictionCol (“Predicted_PE”).setLabelCol (“體育”).setMaxIter (One hundred.).setRegParam (0.1)/ /我們將使用新的火花。毫升管道API。如果你曾與scikit-learn這將是非常熟悉的。val lrPipeline =新管道()lrPipeline.setStages (數組(lr) vectorizer)/ /讓我們首先訓練在整個數據集上看到我們會得到什麼val lrModel = lrPipeline.fit (trainingSet)
val predictionsAndLabels = lrModel.transform (testSet)顯示器(predictionsAndLabels.select (“在”,“V”,“美聯社”,“自”,“體育”,“Predicted_PE”))
現在我們有了真正的預測,我們可以使用一個評價指標,如根均方誤差來驗證我們的回歸模型。根均方誤差越低越好我們的模型。
/ /現在,讓我們對我們的測試數據集計算評價指標
進口org.apache.spark.mllib.evaluation.RegressionMetricsval指標=新RegressionMetrics (predictionsAndLabels.select (“Predicted_PE”,“體育”).rdd。地圖(r = > (r (0).asInstanceOf [雙)、r (1).asInstanceOf [雙))))
val rmse = metrics.rootMeanSquaredErrorval explainedVariance = metrics.explainedVarianceval r2 = metrics.r2/ /首先我們計算殘差和RMSE除以predictionsAndLabels.selectExpr (“體育”,“Predicted_PE”,“體育——Predicted_PE Residual_Error”,年代”“”(PE - Predicted_PE) /rmse美元Within_RSME””“).createOrReplaceTempView (“Power_Plant_RMSE_Evaluation”)
現在我們可以顯示RMSE直方圖。很明顯,這表明,RMSE圍繞0與絕大多數在2均方根誤差。
選擇Within_RSME從Power_Plant_RMSE_Evaluation
正如你所看到的預測非常接近真實的數據點。現在我們可以預測這種植物的最優操作參數和應用這個模型實時其他植物。
接下來是什麼
我們使用的示例代碼在本博客可以作為磚筆記本,你可以試一試免費試用的磚。
這隻是其中一個例子磚如何無縫地與其他AWS組件提供先進的解決方案。學習如何磚幫助一家能源公司的分析物聯網數據,看看我們與DNV GL的案例研究。如果你想開始使用磚,注冊一個免費試用或聯係我們。