为了账号安全,请及时绑定邮箱和手机立即绑定

如下,DB2时间戳数据导入到SparkSql时,怎样转换为SparkSql中的timestamp?

如下,DB2时间戳数据导入到SparkSql时,怎样转换为SparkSql中的timestamp?

慕姐4208626 2022-05-07 14:10:22
DB2数据库到处的数据文件中包含时间戳,格式为yyyy-MM-dd-HH.mm.ss.SSSSSS,如:2017-01-01-12.00.00.120189当通过spark读取时指定读取的格式为yyyy-MM-dd HH.mm.ss.SSS会出现将最后的6位SSSSSS进行计算,除以1000,算出对应的秒,进位到秒位上,出现错误,转化后为:2017-01-01 12:02:00.189,被增加了两分钟。具体代码如下:Dataset<Row> dataset = sparkSession.read().format("com.databricks.spark.csv").option("inferSchema", "true").option("delimiter", ",").option("timestampFormat", "yyyy-MM-dd-HH.mm.ss.SSS").option("mode", "FAILFAST").schema(schema).load("src/test/resource/file/person_10h_timestamp.txt");dataset.show();-------------解决方法---------------------------------------------------------通过测试,发现可以使用非常规方法实现想要的效果。如下:即使用格式为.option("timestampFormat", "yyyy-MM-dd-HH.mm.ss.SSSFFF")实现舍弃最后三位。以下为测试的结果:// 原始数据:2017-01-01-12.00.00.120189// 使用yyyy-MM-dd-HH.mm.ss.SSS -> 2017-01-01 12:02:00.189 增加两分钟// 使用yyyy-MM-dd-HH.mm.ss.SSSSSS -> 2017-01-01 12:02:00.189 增加两分钟// 使用yyyy-MM-dd-HH.mm.ss.SSSFFF -> 2017-01-01 12:00:00.12 OK// 使用yyyy-MM-dd-HH.mm.ss.SSSCCC -> 报错
查看完整描述

1 回答

?
蓝山帝景

TA贡献1843条经验 获得超7个赞

Spark SQL是支持在Spark中使用Sql、HiveSql、Scala中的关系型查询表达式。
它的核心组件是一个新增的RDD类型SchemaRDD,它把行对象用一个Schema来描述行里面的所有列的数据类型,它就像是关系型数据库里面的一张表。
它可以从原有的RDD创建,也可以是Parquet文件
最重要的是它可以支持用HiveQL从hive里面读取数据。

查看完整回答
反对 回复 2022-05-10
  • 1 回答
  • 0 关注
  • 192 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信