问题
使用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驱动器的存储器
- 运行databricks-connect get-spark-home上本地PC获取USSPark_Home值.
- 导航到${spark_home}/conf/文件夹中
- 打开spark-defaults.conf文件.
- 添加下列设置spark-defaults.conf文件 :
spark.driver.mimory4gspark.driver.extraJavaOpts-Xs32M
- 保存修改
- 重开DBCONNET