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里面读取数据。
添加回答
举报
0/150
提交
取消