跳轉到主要內容
Beplay体育安卓版本平台的博客

介紹磚和PySpark情景應用程序開發人員

分享這篇文章

這是一個協作的貼磚和beplay娱乐iosWiseWithData之間。感謝創始人兼總裁伊恩·j·根特售前解決方案研發主管布賴恩•Chuinkam和遷移解決方案研發禁令(邁克)太陽WiseWithData的貢獻。

技術已經走了很長的路從SAS®簡況數據和分析工作量。的lakehouse架構是使團隊來處理所有類型的數據(結構化、半結構化和非結構化)為不同的用例(數據科學、機器學習、實時分析或經典的商業智能和數據倉庫)從一個副本的數據。性能和功能結合優雅和簡單,創建一個平台,今天在世界上是無與倫比的。Beplay体育安卓版本Python和Apache開源技術,如火花™已經變成了# 1語言數據工程師和科學家,在很大程度上因為他們是簡單的和可訪問。

許多SAS用戶大膽踏上現代化他們的技能。而磚和PySpark被設計成簡單的學習,它可以是一個學習曲線為經驗豐富的從業者關注情景應用程序。但好消息的情景應用程序開發者社區是磚體現了開放和簡單的平台架構的概念,讓那些想在現代數據和人工智能雲平台構建解決方案。Beplay体育安卓版本這篇文章表麵的一些組件之間的映射分析的新舊世界編程。

找到一個共同點

他們所有的差異、SAS和磚有驚人的相似之處。都是統一而設計的,企業級平台。Beplay体育安卓版本他們都讓開發人員之間的混合和匹配的SQL和更加靈活的編程範式。都支持內置轉換和數據彙總功能。都支持高端分析函數線性和邏輯回歸、決策樹,隨機森林和集群。他們也都支持語義數據層進行了抽象的底層數據源的詳細信息。讓我們做一些深入探討了這些共享的概念。

vs DataFrames SAS數據的步驟

SAS數據步可以說是最強大的特性在SAS語言。你有能力去聯盟,加入,過濾和添加、刪除和修改列,顯然表達條件和循環的業務邏輯。精通情景應用程序開發人員利用它來構建大規模數據一步管道優化代碼,避免I / O。

的PySpark DataFrame API有大部分相同的功能。對於許多用例,DataFrame管道可以表達相同的數據處理管道一樣。最重要的是DataFrames非常快速和可伸縮,在集群中運行的並行(沒有您需要管理並行)。

情景應用程序示例代碼 PySpark示例代碼
數據df1;df2;x =1;運行;
數據df1;df1 = (df2.withColumn (“x”點燃(1)))

SAS PROC SQL vs SparkSQL

行業標準的SQL是分析語言的最小公分母。在某種程度上幾乎所有的工具都支持它。在SAS,你有一個不同的工具,可以使用SQL,調用PROC SQL和讓你與SAS數據源的方式熟悉很多人對SAS一無所知。一座橋梁或一個共同的語言,幾乎每個人都了解。

PySpark也有類似的功能,通過簡單地調用spark.sql(),您可以輸入SQL世界。但與Apache火花™,你有能力利用SQL知識,可以走得更遠。SQL表達式語法支持在許多地方在DataFrame API,使它更容易學習。另一個SQL程序員友好的工具磚的SQL與SQL編程編輯器來運行SQL查詢lakehouse燃燒的性能。

情景應用程序示例代碼 PySpark示例代碼
procsql;創建sales_last_month作為選擇customer_id,總和(trans_amt)作為sales_amountsales.pos_sales集團通過customer_id訂單通過customer_id;退出;
銷售(“銷售”].createOrReplaceTempView (“銷售”)工作(“sales_last_month”)= spark.sql (”“”選擇customer_id,(trans_amt)作為sales_amount求和從銷售GROUP BY customer_idORDER BY customer_id”“”)

基地SAS怒vs PySpark DataFrame轉換

SAS軟件包的預構建的功能分成過程(怒)。這包括轉換數據聚合和彙總統計,重塑以及數據,導入/導出等。這些事件代表不同的步驟或過程邊界在一個大的工作。相比之下,那些相同的轉換在PySpark可以在任何地方使用,即使在DataFrame管道,給開發者更多的靈活性。當然,你仍然可以把他們分成不同的步驟。

情景應用程序示例代碼 PySpark示例代碼
proc = df1意味著數據馬克斯最小值;var廠商建議零售價發票;使=“極品”;= df2輸出;運行;
                   
df2 = (df1。過濾器(“=“謳歌”).select (“建議零售價”,“發票”).summary (“馬克斯”,“最小值”))

延遲執行SAS“運行”聲明vs PySpark行動

懶惰的執行模型在火花是很多優化的基礎,使PySpark比SAS快得多。信不信由你,SAS也支持懶執行!令人印象深刻的設計語言在50年前。你知道所有這些“運行”(和“退出”)語句你在sa被迫寫嗎?他們自己版本的PySpark實際行動。

在情景應用程序,您可以定義幾個步驟的一個過程,但他們不執行,直到被稱為“運行”。SAS和PySpark之間的主要區別是不懶惰的執行,但所提供的優化。在SAS,不幸的是,執行引擎也“懶”,無視所有潛在的優化。出於這個原因,延遲執行SAS代碼中很少使用,因為它不幫助性能。

所以下次你感到困惑在PySpark懶惰的執行模型,隻要記住SAS是一樣的,隻是沒人使用的特性。你的行動在SAS PySpark就像運行語句。事實上,如果你想在PySpark觸發立即執行(和存儲中間結果到磁盤),運行語句一樣,有一個行動。就叫“.checkpoint ()“DataFrame。

情景應用程序示例代碼 PySpark示例代碼
數據df1;df2;x =1;運行;
df1 = (df2.withColumn (“x”點燃(1))).checkpoint ()

先進的分析和火花毫升

在過去的45年,SAS語言積累了一些有意義的統計和機器學習的能力。SAS / STAT程序打包大量的功能在他們奇怪的和不一致的語法。另一方麵,SparkML包括功能,覆蓋大部分的現代統計的用例,但在一個更有凝聚力和一致的方式。

這兩個包一個顯著區別是整個遙測和診斷方法。與SAS,得到一個完整的轉儲每個和所有統計措施當你做一個機器學習的任務。這可能是混亂和低效率的現代數據科學家。

通常,數據科學家隻需要一個或一組小的模型診斷他們喜歡用評估模型。這就是為什麼SparkML需要一種不同的、更模塊化的方法通過提供api,讓你獲得這些診斷要求。對於大型數據集,這種差異的方法可以通過避免產生顯著的性能影響計算統計數據,沒有使用。

同樣值得注意的是所有的圖書館PySpark毫升是並行算法,所以他們要快得多。對於那些純粹主義者,是的,我們知道一個單線程的邏輯回歸模型將會稍微更好的選擇。我們都聽過這種說法,但你完全忽略了一點。速度模型發展意味著更多的迭代和實驗,導致更好的模型。

情景應用程序示例代碼 PySpark示例代碼
proc物流數據=錠;模型也許=熱量吸收;運行;
vector_assembler = VectorAssembler (inputCols = (“熱”,“泡”),outputCol =“特性”)v_df = vector_assembler.transform(錠).select ([“特性”,“也許”])lr = LogisticRegression (featuresCol =“特性”labelCol =“也許”)lr_model = lr.fit (v_df)lr_predictions = lr_model.transform (v_df)lr_evaluator = BinaryClassificationEvaluator (rawPredictionCol =“rawPrediction”labelCol =“也許”)打印(“麵積民國”lr_evaluator.evaluate (lr_predictions))

在上麵PySpark示例,輸入列”熱,泡”合並成一個單一的使用特征向量VectorAssemblerAPI。邏輯回歸模型,然後在轉換後的數據幀使用訓練LogisticRegression算法從SparkML圖書館。打印AUC指標,BinaryClassificationEvaluator從訓練模型用於預測和實際標簽作為輸入。這種模塊化方法能更好地控製計算模型選擇的性能指標。

的差異

雖然SAS和PySpark之間有許多共同點,也有很大的差異。作為SAS專家學習PySpark,這些差異可以很難導航。讓我們把它們分成幾個不同的類別。有一些SAS功能沒有本地PySpark,然後有事情在PySpark需要不同的工具或方法。

雖然SAS和PySpark之間有許多共同點,也有很大的差異。

不同的生態係統

SAS平台是整個Beplay体育安卓版本集收購和內部開發的產品,其中許多一起工作相對較好。磚是建立在開放標準,因此,您可以很容易地集成成千上萬的工具。讓我們看看一些SAS-based磚中可用的工具和功能類似的用例。

讓我們先從SAS®數據集成Studio工作室(DI)。由一個複雜的元數據驅動的模型,DI工作室充滿SAS的一些重要作用的生態係統。它主要提供了生產工作流程編製ETL工作負載的能力。在磚,數據工程管道開發和部署使用筆記本電腦和工作。數據工程任務是由Apache火花(大數據ETL)事實上的行業標準。

磚的三角洲生活表(DLT)編製工作進一步簡化了ETL管道開發Lakehouse架構。DLT提供了一個可靠的框架,以聲明的方式創建ETL管道代替傳統的程序變換的序列。意義,用戶描述所需的管道的結果沒有明確列出命令必須執行步驟,得出結果。DLT發動機智能地找出“如何”計算框架應該執行這些過程。

DI工作室的其他關鍵的角色扮演是提供數據血統追蹤。這個特性,但是,隻有正常工作當你設置一切剛剛好和手動輸入的元數據在所有節點代碼(一個非常痛苦的過程)。相比之下,DLT確保生成的管道自動捕捉數據之間的依賴關係,用於確定執行順序執行的更新和記錄血統信息時管道的事件日誌。

三角洲生活表(DLT)自動提取數據依賴關係和家族通過了解和分析查詢

雖然大多數數據科學家非常快樂的程序員,一些喜歡鼠標操作的數據挖掘工具。對於這些人來說,還有一個新興術語稱為“公民數據科學家,”是誰的形象分析,但不深入的技術。在SAS,你有非常昂貴的工具沒有編碼SAS®企業礦工建立模型。這個工具,從一個逝去的時代,它的用戶界麵允許用戶樣本,探索,修改模型和評估他們的SAS數據都從舒適的鼠標,不需要鍵盤。情景應用程序的另一個點,然後單擊工具,叫做SAS®企業指南,是最受歡迎的SAS編程和接口指向-點擊分析。因為SAS的複雜語法,很多人喜歡利用指向-點擊工具來生成情景應用程序代碼,然後修改以適應他們的需求。

PySpark,更簡單和更一致的api,因此需要減少輔助工具。當然現代科學方法的數據是通過筆記本,和磚筆記本做了偉大的工作做了編碼的任務應該點和點擊,像圖形數據。探索性數據分析和模型發展從磚磚使用磚毫升的運行時執行的筆記本。與磚AutoML,用戶隻需點擊選擇快速培訓和部署提供了一個模型。磚AutoML“玻璃盒子”的方法通過生成可編輯,可共享的筆記本與基線模型集成MLflow跟蹤和最佳實踐,為新項目提供一個可修改的起點。

最新的收購8080實驗室一個新功能,將磚筆記本和工作區執行數據探索和分析使用低代碼/沒有代碼。的bamboolib包從8080年實驗室自動生成Python代碼通過隻需點擊用戶執行的操作。

把它放在一起,Lakehouse架構由開源三角洲湖在磚簡化了數據架構,使存儲所有數據一次數據湖和AI和BI數據直接。

Lakehouse架構,由開源三角洲湖在磚,簡化了數據架構,使你所有的數據存儲在一個數據湖和AI和BI數據直接。

上麵的圖表顯示了磚的參考架構部署在AWS(體係結構將在其他類似的雲平台)支持不同數據源,用戶用例和角色都通過一個統一的平台。Beplay体育安卓版本數據工程師可以輕鬆地使用開放文件格式,例如Apache拚花,獸人連同內置性能優化,事務支持,執法和治理模式。

數據工程師現在必須少做管道工作,專注於核心數據轉換使用流數據和結構化流和三角洲湖建成的表。lakehouse毫升是一等公民,這意味著數據科學家不浪費時間二次抽樣或移動數據分享儀表板。數據和業務分析師可以從相同的數據層作為利益相關者和其他數據使用他們心愛的SQL編程語言來分析數據。

不同的方法

與所有更改,有些事情你隻需要適應。盡管PySpark SAS編程的功能存在的一些特性是用完全不同的方式。這裏有一些例子的類型不同,你需要適應,為了在PySpark是有效的。

程序性SAS與麵向對象PySpark

在SAS,大部分的代碼最終將作為數據步驟或程序。在這兩種情況下,你總是需要顯式地聲明所使用的輸入和輸出數據集(即數據=數據集)。相比之下,PySpark DataFrames使用麵向對象的方法,在DataFrame參考附加的方法可以執行。在大多數情況下,這種方法更方便、更符合現代編程技術。但它需要一些時間來適應,特別是對於開發人員從來沒有做任何麵向對象編程。

情景應用程序示例代碼 PySpark示例代碼
proc排序數據=df1=dedup nodupkey;通過cid;運行;
dedup = df1.dropDuplicates ([cid的]).orderBy ([cid的])

數據改變

例如,讓我們來重塑在SAS數據的共同任務,名義上擁有“proc轉置。“轉置,不幸的是,是極其有限的,因為它是有限的,一個數據係列。這意味著實際應用你必須叫它很多次和膠水的數據。這可能是一個可接受的實踐小SAS數據集,但它可能導致小時的額外的處理更大的數據集。由於這個限製,許多情景應用程序開發人員開發出了自己的數據重組技術,許多與保留使用的組合數據的步驟,數組和宏觀循環。這個重塑代碼往往最終被100的情景應用程序的代碼行,但最有效的方式來執行SAS的轉換。

許多低級的操作,可以在數據執行步驟在PySpark不是可用的。相反,PySpark等常見的任務提供了更簡單的接口數據重塑groupBy () .pivot()轉換,同時支持多個數據係列。

情景應用程序示例代碼 PySpark示例代碼
proc轉置數據=測試= xposed;var1 var2;varx;id y;運行
                   
xposed=(測試.groupBy (“var1”,“var2”).pivot (“y”).agg (去年(“x”)).withColumn (“_name_”點燃(“y”)))

麵向列的和麵向業務邏輯的

在大多數數據處理係統,包括PySpark,你的上下文中定義業務邏輯的一個列。SAS相比之下更有靈活性。您可以定義大量的業務邏輯在一個數據步驟和業務邏輯框架中定義的列值。雖然這種方法更具表達性和靈活的,它也可以有問題的調試。

改變你的思維方式是麵向列的不是挑戰,但它確實需要一些時間。如果你精通SQL,這應該很容易。問題更多的是適應現有的業務邏輯代碼用於世界。一些數據步驟包含數千行麵向業務邏輯的代碼,使人工翻譯完整的噩夢。

情景應用程序示例代碼 PySpark示例代碼
數據output_df;input_df;如果x=5然後做;一個=5;b=6;c=7;結束;其他的如果x=10然後做;一個=10;b=11;c=12;結束;其他的做;一個=1;b=1;c=0;結束;運行;
output_df = (input_df.withColumn (“一個”expr (”““案例當(x = 5) 5當(x = 10) 10其他1”“”)).withColumn (“b”expr (”““案例當(x = 5) 6當(x = 10) 11其他1”“”)).withColumn (“c”expr (”““案例當(x = 5) 7當(x = 10) 12其他0”“”)))

丟失的特性

有許多強大的和重要的功能在PySpark SAS就是不存在的。當你有你最喜歡的工具的工具箱,突然失蹤,不管多麼花哨或強大的新工具;可靠的日本Dozuki看到一些工作仍然是唯一的工具。與PySpark現代化,你確實會遇到這些丟失的工具,但不要擔心,繼續讀下去,我們有一些好消息。首先讓我們來談談它們是什麼,為什麼他們很重要。

先進的SAS數據步特性

假設你想生成新行條件,保持前一行的結果計算嵌入條件邏輯或創建總數和小計。這些都是任務相對簡單的迭代SAS數據一步API,但是我們的可靠的PySpark DataFrame裝備是不容易處理。

一些數據處理任務需要有完整的細粒度的控製整個過程,在一個“行迭代”的方式。這樣的任務不兼容PySpark的無共享MPP架構,它假定行可以完全相互獨立地處理。隻有有限的窗戶之類的api函數來處理行間相關性。在PySpark找到解決這些問題的辦法可以是非常令人沮喪和費時。

情景應用程序示例代碼
數據df2;df;通過customer_id seq_num;保留計數器;標簽=“”;如果first.customer_id然後計數器=0;其他的計數器=計數器+1;輸出;如果last.customer_id然後做;seq_num=。;標簽=“總”;輸出;結束;運行;

自定義格式和備用

SAS格式是非凡的簡單性和有效性。他們提供一種機製來格式化,重新映射和代表你的數據在一個工具。而內置的格式是用於處理常見的任務,如輸出一個日期字符串,對於數字和字符串上下文他們也有用。也有類似的工具在PySpark這些用例。

自定義格式或備用的概念是一個不同的故事。他們支持一個簡單的映射鍵值對,但是也映射範圍和支持默認值。雖然一些用例可以工作在通過使用連接,SAS提供的方便和簡潔的語法格式不是PySpark是可用的。

情景應用程序示例代碼
proc格式;價值prodcd1=“鞋”2=“靴子”3=“涼鞋”;運行;數據sales_orders;sales_orders;product_desc = (prodcd product_code。);運行;

圖書館概念和訪問引擎

最常見的一種使用PySpark情景應用程序開發人員的抱怨是,它缺乏語義數據層直接集成到核心終端用戶的API(例如Python會話)。SAS數據圖書館是如此的熟悉和根深蒂固的概念,沒有它很難駕馭。PySpark中相對較新的目錄API,但這需要不斷打電話回商店,獲得你想要的。沒有定義一個邏輯數據存儲和恢複DataFrame對象為每個表。大多數情景應用程序開發人員轉向PySpark不喜歡叫spark.read。jdbc訪問每一個數據庫表,它們是用來訪問引擎庫的概念,在一個數據庫中的所有表在你的指尖。

情景應用程序示例代碼
庫名lib1 path1”;庫名lib2 path2”;數據lib2.dataset;lib1.dataset;運行;

解決的差異——鏈輪運行時

雖然許多SAS語言概念不再相關或方便,丟失的特性我們剛才討論的確是非常有用的,在某些情況下幾乎不可能沒有。這就是為什麼WiseWithData開發了一種特殊的插件數據磚和PySpark帶來那些熟悉現代平台和強大的功能,在嗎Beplay体育安卓版本鏈輪運行時。WiseWithData如何的一個關鍵部分是能夠自動遷移情景應用程序代碼到磚和PySpark以不可思議的速度,同時提供一對一的代碼轉換的經曆。

鏈輪庫和數據庫訪問引擎

鏈輪庫讓你快速跟蹤分析與簡化方法來訪問您的數據來源,就像SAS語言庫的概念。這個強大的鏈輪運行時特性意味著不再搞得數據路徑和JDBC連接器,並訪問所有數據在一行代碼。簡單的注冊一個圖書館,所有相關DataFrames準備好了。

情景應用程序 鏈輪
庫名自由“路徑”;lib.dataset
register_library(“自由”、“路徑”)自由(“數據集”)

自定義格式/備用

與鏈輪運行時,您可以利用權力和簡單的自定義格式和備用來改變你的數據。變換你的數據裏麵PySpark DataFrames使用自定義格式,就像你在SAS環境。

情景應用程序 鏈輪
proc格式;價值prodcd1=“鞋”2=“靴子”3=“涼鞋”;運行;數據sales_orders;sales_orders;product_desc = (prodcd product_code。);運行;
value_formats = [{“fmtname”:“prodcd”,“fmttype”:“N”,“fmtvalues”:【{“開始”:1,“標簽”:“鞋”},{“開始”:2,“標簽”:“靴子”},{“開始”:3,“標簽”:“涼鞋”},]}]register_formats(火花,‘工作’value_formats)工作(“sales_orders”)= (工作(“sales_orders”].transform (put_custom_format (“product_desc”,“product_code”,“prodcd')))

宏觀經濟變量

宏變量是一個強大的概念在SAS語言。在PySpark雖然有一些相似的概念,這是不一樣的。這就是為什麼我們將這一概念帶入鏈輪運行時,因此很容易在PySpark使用這些概念。

情景應用程序 鏈輪
%x =1;x“value_&x._1”
set_smv (“x”,1)get_smv (“x”)“value_ {x} _1”。格式(* * get_smvs ())

先進的SAS數據步驟和行迭代處理語言(RIPL API)

SAS數據一步語言的靈活性可以作為PySpark鏈輪運行時API。想要使用由組處理,保留列,做循環,和數組?RIPL API是你最好的朋友。RIPL API帶回熟悉business-logic-oriented數據處理視圖。現在你可以用熟悉的if / else條件表達業務邏輯塊在Python中。你知道的所有特性和愛,但Python的緩解和PySpark的性能和可伸縮性。

情景應用程序 鏈輪- RIPL API
數據df2;df;通過customer_id seq_num;保留計數器;標簽=“”;如果first.customer_id然後計數器=0;其他的計數器=計數器+1;輸出;如果last.customer_id然後做;seq_num=。;標簽=“總”;輸出;結束;運行;
defripl_logic():rdv [“標簽”]=' '如果rdv [“_first_customer_id”]>0:rdv [“計數器”]=0其他的:rdv [“計數器”]= rdv [“計數器”)+1輸出()如果rdv [“_last_customer_id”]>0:rdv [“seq_num”]= ripl_missing_numrdv [“標簽”]=“總”輸出()工作(“df2”)= (工作(“df”].transform (ripl_transform (by_cols = [“customer_id”,“seq_num”),retain_cols = [“計數器”]))
                   

再培訓總是困難的,但我們在這裏幫助

這個通往成功的遷移可以迷惑,甚至沮喪。但你並不孤單,成千上萬的SAS-based專業人士加入這個有意義的旅程。WiseWithData和磚是來支持你的工具、資源和有用的提示,使這一過程更容易。

試一試,磚SAS用戶,在磚學院的基本實踐經驗PySpark SAS編程語言結構和編程聯係我們更多地了解我們如何協助你的SAS團隊在他們的ETL工作負載數據磚,使最佳實踐。

SAS®和其他所有SAS研究所公司產品或服務的名稱注冊商標或商標的SAS研究所inc .)在美國和其他國家。®表明美國注冊。

免費試著磚

相關的帖子

看到所有Beplay体育安卓版本平台的博客的帖子
Baidu
map