栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

spark处理时间(java.util.Date)转换为字符串出现不合理日期(02-31)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

spark处理时间(java.util.Date)转换为字符串出现不合理日期(02-31)

问题一

在spark里使用 rdd.map 做准换时,其中有一个时间字段(列), 需要将java.util.Date类型转换为字符串类型,进行对表insert。
转换时出现了 2021-02-31这种非法日期,从而导致入库失败

 

package com.scala01

import java.text.SimpleDateFormat
import java.util.Date

import org.apache.spark.sql.{Dataframe, Dataset, SaveMode, SparkSession}
import com.pojo.Hist
import org.apache.spark.rdd.RDD

object Spark02_histToTbase {

  //spark为多线程 不建议使用全局
  //val sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
  def main(args: Array[String]): Unit = {

    var num:Int =10000000;
    if (args.length==1){
      num=Integer.valueOf(args(0))
    }


    val spark = SparkSession.builder()
      //.master("local[*]")
      .appName("InsertTbase")
      .getOrCreate()
    import spark.implicits._


    

    val rdd = spark.sparkContext.makeRDD(1 to num)
              .map(x=> {Hist.ToData()})
              // 使用SimpleDateFormat将Date类型转换为字符串,会出现2021-02-31 这种不合法日期
              .map(x=>{val sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                //val ts:Long=x.getDt.getTime
                val dt=sdf.format(x.getDt) // 这种形式不会出现 不合理日期
                //if(1614528557000L 
问题二 
//private final static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

将SimpleDateFormat sdf 声明为static 这是一个全局的 在多线程下会有问题。

spark 多线程的理解:

spark配置 :
spark.executor.instances    2 意思是:启动2个container
spark.executor.cores    4    意思是:一个container中 会启动 4个线程

总共启动8个task,每个container启动4个task,这4个task就是多线程的

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/322438.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号