Java – spark structured streaming automatically converts timestamps to local time
•
Java
I have UTC and ISO 8601 timestamps, but using structured streams, it will be automatically converted to local time Is there any way to stop this conversion? I want to use it in UTC
I'm reading JSON data from Kafka and using from_ The JSON spark function parses them
Input:
{"Timestamp":"2015-01-01T00:00:06.222Z"}
Flow:
SparkSession
.builder()
.master("local[*]")
.appName("my-app")
.getOrCreate()
.readStream()
.format("kafka")
... //some magic
.writeStream()
.format("console")
.start()
.awaitTermination();
framework:
StructType schema = DataTypes.createStructType(new StructField[] {
DataTypes.createStructField("Timestamp",DataTypes.TimestampType,true),});
Output:
+--------------------+ | Timestamp| +--------------------+ |2015-01-01 01:00:...| |2015-01-01 01:00:...| +--------------------+
As you can see, the number of hours increases automatically
PS: I try to use from_ utc_ Timestamp spark function, but no luck
Solution
It worked for me:
spark.conf.set("spark.sql.session.timeZone","UTC")
It tells spark SQL to use UTC as the default time zone for timestamp I use it in spark SQL, for example:
select *,cast('2017-01-01 10:10:10' as timestamp) from soMetable
I know it's in 2.0 1 does not work But applicable to spark 2.2 I also used it in sqltransformer
I'm not sure about streaming
The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
THE END
二维码
