在DBConnect ProtoSerializer栈溢出错误

堆栈溢出错误DBConnect表明你需要在本地PC上分配更多的内存。

写的ashritha.laxminarayana

去年发表在:2022年5月9日

问题

您正在使用DBConnect (AWS|Azure|GCP)来运行一个PySpark变换与超过100列DataFrame当你得到一个堆栈溢出错误。

py4j.protocol。Py4JJavaError:调用o945.count时发生一个错误。:. lang。在java.lang.Class.getEnclosingClass StackOverflowError java.lang.Class.getEnclosingMethodInfo (Class.java: 1072) (Class.java: 1272) java.lang.Class.getSimpleBinaryName (Class.java: 1443) java.lang.Class.getSimpleName (Class.java: 1309) org.apache.spark.sql.types.DataType.typeName (DataType.scala: 67) org.apache.spark.sql.types.DataType.simpleString (DataType.scala: 82) org.apache.spark.sql.types.DataType.sql (DataType.scala: 90) org.apache.spark.sql.util.ProtoSerializer.serializeDataType (ProtoSerializer.scala: 3207) org.apache.spark.sql.util.ProtoSerializer.serializeAttrRef (ProtoSerializer.scala: 3610) org.apache.spark.sql.util.ProtoSerializer.serializeAttr (ProtoSerializer.scala: 3600) org.apache.spark.sql.util.ProtoSerializer.serializeNamedExpr (ProtoSerializer.scala: 3537) org.apache.spark.sql.util.ProtoSerializer.serializeExpr (ProtoSerializer.scala: 2323) org.apache.spark.sql.util.ProtoSerializer anonfun nestedInanonfun serializeCanonicalizable美元美元1美元1.美元applyorelse (ProtoSerializer.scala: 3001) org.apache.spark.sql.util.ProtoSerializer anonfun nestedInanonfun serializeCanonicalizable美元美元1美元1.美元applyorelse (ProtoSerializer.scala: 2998)

笔记本电脑工作正常,执行相同的操作不会产生一个错误。

示例代码

你可以用这个样本代码复制错误。

它会创建一个与200年DataFrame列和重命名。

这个示例代码中正确运行一个笔记本,但在DBConnect运行时导致一个错误。

% python df = spark.createDataFrame ([{str (i):我因为我在范围(2000)}))df = spark.createDataFrame ([{str (i):我因为我在范围(200)}))在df坳。列:df = df。withColumnRenamed(坳坳+ _a) df.collect ()

导致

DBConnect运行代码时,一些函数处理远程集群上的司机,但一些处理客户机本地电脑。

如果没有足够的内存分配在本地电脑,你得到一个错误。

解决方案

你应该增加内存分配给Apache引发司机在本地PC上。

  1. 运行databricks-connect get-spark-home在您的本地电脑的$ {spark_home}价值。
  2. 导航到$ {spark_home} / conf /文件夹中。
  3. 打开spark-defaults.conf文件。
  4. 添加以下设置spark-defaults.conf文件:
    spark.driver。内存4 g spark.driver。extraJavaOptions -Xss32M
  5. 保存更改。
  6. 重启DBConnect。
删除

警告

DBConnect仅适用于砖运行时版本的支持。确保您使用的是运行时支持集群使用DBConnect之前。



这篇文章有用吗?