@lizou
今天,我也有同樣的問題,當我火花結構化數據矩陣轉置1000列x 4284行。大小約為2 gb的數據。
這是代碼:
https://github.com/NikhilSuthar/TransposeDataFrame
從pyspark.sql。函數從pyspark進口*。sql進口SparkSession def TransposeDF (df、列pivotCol): columnsValue =列表(地圖(λx: str(“的”)+ str (x) + str (“。”) + str (x)列)stackCols = ', '。加入(x x columnsValue) df_1 = df。selectExpr (pivotCol,“堆棧(“+ str (len(列))+”、“+ stackCols +”)”) \ .select (pivotCol、“col0”、“col1”) final_df = df_1.groupBy(坳(“col0”)) .pivot (pivotCol)。gg (concat_ws (“collect_list(坳(“col1”)))) \ .withColumnRenamed (“col0 pivotCol)返回final_df df = TransposeDF (df, df。列1:,“AAPL_dateTime”)
(上麵的代碼在更換一個小的數據矩陣(如工作。5列x 252行)
我VM部署一個32 gb的內存,還有一個“致命錯誤:Python內核是反應遲鈍的
更換一個數據矩陣應該隻有O (C x R)空間複雜性和運行時的複雜性。
就我而言,應該是2 gb的空間複雜度。
我檢查了磚生活指標。隻使用20%的CPU,還有20 GB的空閑內存。然而,有一個“驅動程序,但沒有反應,可能由於GC在事件日誌。
我不知道為什麼還有致命錯誤:Python內核是反應遲鈍的。也許,這不僅是相關的記憶?
現在,我在一個112 GB的內存GPU轉置一個2 GB的數據矩陣。也沒有的驅動程序,但沒有反應,可能是因為GC的在事件日誌中。希望這個工作。但仍然無法理解為什麼改換一個2 GB的數據矩陣需要的內存數量
@lizou
我也這麼認為。每一次,當內存使用%達到50% +,磚將自動定量更多的工人。
3天前,我用熊貓的轉置數據,但似乎由於GC超級緩慢而失敗。昨天,我試圖隻用PySpark轉置數據。
我認為磚需要解釋更多關於他們如何分配內存和內存計算方法。
順便說一句,就現在,我完成了我的數據轉換。
這是我做的:
這是我的猜測:置換一個數據矩陣需要收集所有的數據到一個節點,所以許多較小的vm部署可能會失敗數據轉換。更換數據隻能在單節點模式。