原序器栈溢出错误

DBConnect中栈溢出错误表示需要分配本地PC更多存储器

写由ashritha.laxminarayana

2022年5月9日

问题

使用dbconnectAWS系统|休眠|GCP运行百列以上的DataFrame转接栈溢出错误

Py4j.protocol.Py4JavaError:调用O945计时出错: 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.getSimpleName(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)      at org.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.serializeNamedExpr(ProtoSerializer.scala:3537)      at org.apache.spark.sql.util.ProtoSerializer.serializeExpr(ProtoSerializer.scala:2323)      at org.apache.spark.sql.util.ProtoSerializer$$anonfun$$nestedInanonfun$serializeCanonicalizable$1$1.applyOrElse(ProtoSerializer.scala:3001)      at org.apache.spark.sql.util.ProtoSerializer$$anonfun$$nestedInanonfun$serializeCanonicalizable$1$1.applyOrElse(ProtoSerializer.scala:2998)

正确执行笔记本操作不产生错误

示例代码

可使用此样本代码复制错误

创建DataFrame带200列并重命名全部

样本代码笔记本正确运行,但在DBConnect运行时出错

Pythondf=spark.dectionDataFrame

因果

DBConnect运行代码时,部分函数由远程集群驱动处理,但部分函数由本地客户端PC处理

内存不足本地PC分配时会报错

求解

增加分配给本地PCAAPIspark驱动器的存储器

  1. 运行databricks-connect get-spark-home上本地PC获取USSPark_Home值.
  2. 导航到${spark_home}/conf/文件夹中
  3. 打开spark-defaults.conf文件.
  4. 添加下列设置spark-defaults.conf文件 :
    spark.driver.mimory4gspark.driver.extraJavaOpts-Xs32M
  5. 保存修改
  6. 重开DBCONNET
删除

警告

DBConnect仅使用支持Databricks Runtime版本确保在使用DBConnect前对集群使用支持运行时间



文章有帮助吗