Spark程序排错 DAG Scheduler StackOverflowError

Spark程序排错 DAG Scheduler StackOverflowError

场景

最近在工作中遇到新的数据ETL场景:
数据部分在MySQL库中,主要的细节日志数据使用URL方式存储在阿里云OSS中存储,
需要把所有日志数据读出来存储到数据仓库中(日志数据存储方式涉及到私有化部署一些问题导致)。
代码如下

val dataArr = logInfo
      .filter(row => {
        val url = row.getAs[String]("feedback_data")
        val valid = row.getAs[String]("valid")
        val homework_id = row.getAs[String]("resource_assign_id")
        valid == "1" && homework_id != null && url != null && UrlUtil.isUrlHttp(url)
      })
      .map(row => {
        // 获取Mysql中的各属性值
        var url: String = row.getAs[String]("feedback_data")
        var student_id: String = row.getAs[String]("student_id")
        var homework_id: String = row.getAs[String]("resource_assign_id")
        // 使用URL工具类将 http请求的url转换为OSS的路径格式
        var ossurl = UrlUtil.HttpUrlReplaceToOSS(url)
        (ossurl, url, student_id, homework_id)
      })
      .collect()

val rddlists = ArrayBuffer[RDD[LogData]]()
for (tp <- homework) {
         // OSS文件路径
        val filePath = tp._1
        // 其他属性值
        //....
        // 结合笔记数据与维度表 整合成源数据的格式
        val rawData = sc.textFile(filePath).map(str => {
          val datas: Array[String] = str.split(" ")
        // ....
          LogData(feedback_data,homework_id,...)
        })
        rddlists.append(rawData)
  }
//rddlists中的文件路径转化的rdd大约500+,将所有RDD 结合成一个RDD 
 val alldatardd: RDD[LogData] = rddlists.reduceLeft((a, b) => a.union(b))
 val logdatadf = alldatardd.toDF().createOrReplaceTempView("log_data")

结果
java.lang.StackOverflowError
在这里插入图片描述
呗
被 Driver stacktrace 迷惑了,以为是在Driver端爆出的异常, 不管怎么加
–conf spark.driver.extraJavaOptions="-Xss100M"
还是一样出错
然后就去查资料 有一篇博客提醒使用 sparkSession.sparkContext.union(Seq(RDD[]))
或者增加
–conf spark.executor.extraJavaOptions="-Xss100M"
程序完美运行。。。

具体内容待调研

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值