熊貓在即將到來的Apache火花™3.2 API
2021年10月4日 在工程的博客
我們很高興宣布,熊貓API將即將到來的Apache火花™3.2發行版的一部分。熊貓圖書館是一個功能強大、靈活和快速增長,成為一個標準的數據科學圖書館。現在大熊貓用戶將能夠利用熊貓API在現有火花集群。
幾年前,我們推出了考拉一個開源項目,實現了熊貓DataFrame API之上的火花,成為數據科學家之間的廣泛采用。最近,考拉正式並入PySparkPySpark SPIP:支持大熊貓API層作為的一部分項目禪(見也在PySpark項目禪:簡化數據科學從數據+人工智能峰會2021)。
熊貓用戶可以擴展與一個簡單的工作負載的變化即將到來的火花3.2版:
<年代>從熊貓進口read_csv < / s >從pyspark.pandas進口read_csvpdf = read_csv (“data.csv”)
這篇文章總結了熊貓3.2 API支持火花,突顯出引人注目的特性,改變和路線圖。
可伸縮性超出一台機器
熊貓的已知的限製之一是,它不與你的數據量規模線性由於單機處理。例如,熊貓失敗導致內存溢出的如果它試圖讀大於可用內存的數據集在一個機器:
熊貓API火花克服了限製,使用戶能夠處理大型數據集通過利用火花:
熊貓API的火花也尺度到大型集群節點。下麵的圖表顯示了其性能在分析15 tb拚花與不同大小的數據集集群。集群中的每台機器有8個vcpu和61年殘肢的記憶。
分布式執行的熊貓API火花尺度幾乎線性測試。花費的時間減少了一半當集群中機器的數量翻倍。加速比單個機器也是重要的。例如,在標準偏差基準,256台機器的一個集群可以處理數據~ 250倍一台機器在大致相同的時間(每台機器有8個vcpu和61年殘肢內存):
單台機器 | 集群的256台機器 | |
鑲花的數據集 | 60 gb | 60 gb x 250 (15 tb) |
運行時間(sec)的標準差 | 12個年代 | 十年代 |
單機性能優化
熊貓熊貓API火花往往優於甚至在單個機器上由於火花的優化引擎。下麵的圖表展示了熊貓API火花相比,熊貓在機器上(有96個vcpu, 384殘肢內存)對一個130 gb的CSV數據集:
多線程和火花SQL催化劑優化器為優化性能。例如,連接數操作~ 4倍舞台代碼生成:5.9年代沒有代碼生成,1.6 s和代碼生成。
在鏈接操作引發的優勢尤其重要。催化劑查詢優化器可以識別過濾器跳過數據明智的和可以應用基於磁盤的連接,而大熊貓傾向於所有數據加載到內存中每一步。
連接兩個過濾框架考慮查詢然後再計算平均值的加入,熊貓API火花成功在4.5 s,而熊貓以失敗告終,因為伯父的(內存)的錯誤如下:
交互式數據可視化
大熊貓使用matplotlib默認情況下,它提供了靜態圖圖表。例如,下麵的代碼生成一個靜態圖表:
#區域pandas.DataFrame (np.random.rand (One hundred.,4),列=列表(“abcd”).plot.area ()
相比之下,熊貓在火花使用API情節後端在默認情況下,它提供了交互式圖表。例如,它允許用戶交互式地放大和縮小。基於類型的情節,熊貓API火花自動決定最好的方式來執行計算內部在生成交互式圖表:
#區域pyspark.pandas.DataFrame (np.random.rand (One hundred.,4),列=列表(“abcd”).plot.area ()
利用統一的分析功能的火花
熊貓是專為Python數據科學與批處理,而火花是專為統一的分析,包括SQL,流媒體處理和機器學習。來填補這一缺口,熊貓API火花為高級用戶提供了許多不同的方法,利用火花引擎,例如:
- 用戶可以直接通過SQL查詢數據引發的優化的SQL引擎,如下所示:
> > >進口熊貓作為pd> > >進口pyspark.pandas作為ps> > >pdf = pd.DataFrame ({“一個”:【1,3,5]})#熊貓DataFrame> > >自衛隊= spark.createDataFrame (pdf)# PySpark DataFrame> > >psdf = sdf.to_pandas_on_spark ()# pandas-on-Spark DataFrame> > >#通過SQL查詢…ps.sql (“SELECT count(*)的num {psdf}”)
- 它還支持字符串插值語法與Python對象自然:
> > >pred =範圍(4)> > >#與Python字符串插值實例…ps.sql (“SELECT * {psdf}, {pred}”)
- 熊貓API火花還支持流媒體處理:
> > >def函數(自衛隊,_):…# pandas-on-Spark DataFrame…psdf = sdf.to_pandas_on_spark ()…psdf.describe ()…> > >spark.readStream。格式(…“卡夫卡”).load () .writeStream.foreachBatch(函數).start ()
- 用戶可以輕鬆地調用引發的可擴展的機器學習庫:
> > >從pyspark.ml.feature進口StringIndexer> > >自衛隊= psdf.to_spark ()# PySpark DataFrame> > >索引器= StringIndexer (…inputCol =“類別”outputCol =“categoryIndex”)> > >索引= indexer.fit (sdf) .transform (sdf)> > >indexed.show ()
另請參閱的博客關於火花PySpark和熊貓API之間的互操作性。
接下來是什麼?
接下來的火花釋放,路線圖重點關注:
•更多類型提示
熊貓API的代碼引發目前部分輸入,這仍然使靜態分析和自動完成。在未來,所有的代碼將應試者。
•性能改進
在火花熊貓API有幾個地方我們可以進一步提高性能通過更緊密地與引擎交互和SQL優化器。
•穩定
有幾個地方修複特別是南等相關缺失值和NA角情況下的行為差異。
此外,熊貓火花API將遵循和匹配其行為到最新版本的熊貓在這些情況下。
•更多的API報道
熊貓API熊貓API的火花覆蓋率達到了83%,這個數字仍在增加。現在的目標是90%。
請文件的問題如果有錯誤或缺失的功能需要,當然,我們總是歡迎來自社區的貢獻。
開始
如果你想嚐試熊貓API在磚引發運行時10.0 Beta(3.2即將到來的Apache火花),報名參加Community Edition磚或磚免費試用在幾分鍾內開始。