DBConnect中的ProtoSerializer堆棧溢出錯誤

DBConnect出現堆棧溢出錯誤,需要在本地PC上分配更多內存。

寫的ashritha.laxminarayana

最後發布日期:2022年5月9日

問題

您正在使用DBConnect (AWS|Azure|GCP當你得到一個堆棧溢出錯誤時,在一個超過100列的DataFrame上運行PySpark轉換。

py4j.protocol。Py4JJavaError:調用o945.count時發生錯誤。:java.lang.StackOverflowError at java.lang.Class.getEnclosingMethodInfo(Class.java:1072) at java.lang.Class.getEnclosingClass(Class.java:1272) at java.lang.Class.getSimpleBinaryName(Class.java:1443) at java.lang. class . getsimplaryename (Class.java:1309) at org.apache.spark.sql.types.DataType.typeName(DataType.scala:67) at org.apache.spark.sql.types.DataType.simpleString(DataType.scala:82) at org.apache.spark.sql.types.DataType.sql(DataType.scala:90) atorg.apache.spark.sql.util.ProtoSerializer.serializeDataType(ProtoSerializer.scala:3207) at org.apache.spark.sql.util.ProtoSerializer.serializeAttrRef(ProtoSerializer.scala:3610) at org.apache.spark.sql.util.ProtoSerializer.serializeAttr(ProtoSerializer.scala:3600) at org.apache.spark.sql.util.ProtoSerializer.serializeAttr(ProtoSerializer.scala: 3537) at org.apache.spark.sql.util.ProtoSerializer.serializeExpr(ProtoSerializer.scala:2323) atorg.apache.spark.sql.util.ProtoSerializer$$anonfun$$nestedInanonfun$ 1$1. applyorelse (ProtoSerializer.scala:3001) at org.apache.spark.sql.util.ProtoSerializer$$anonfun$$nestedInanonfun$serializeCanonicalizable$1$1. applyorelse (ProtoSerializer.scala:2998)

在筆記本上執行相同的操作是正確的,不會產生錯誤。

示例代碼

您可以使用這個示例代碼重現錯誤。

它創建了一個包含200列的DataFrame,並將它們全部重命名。

這個示例代碼在筆記本電腦中正確運行,但在DBConnect中運行時會出現錯誤。

%python df = spark.createDataFrame([{str(i): i for i in range(2000)}]) df = spark.createDataFrame([{str(i): i for i in range(200)}]) for col in df。列:df = df。withcolumnrename (col, col + "_a") df.collect()

導致

在DBConnect中運行代碼時,有些函數在遠程集群驅動程序上處理,但有些函數在客戶機PC上本地處理。

如果本地PC上沒有分配足夠的內存,將會得到一個錯誤。

解決方案

該任務指導管理員增加本地PC為Apache Spark驅動分配的內存。

  1. 運行databricks-connect get-spark-home在您的本地PC上獲取$ {spark_home}價值。
  2. 導航到$ {spark_home} / conf /文件夾中。
  3. 打開spark-defaults.conf文件。
  4. 將以下設置添加到spark-defaults.conf文件:
    spark.driver.extraJavaOptions -Xss32M .memory 4g
  5. 保存更改。
  6. 重啟DBConnect。
刪除

警告

DBConnect僅適用於受支持的Databricks Runtime版本。在使用DBConnect之前,請確保在集群上使用受支持的運行時。