Spark Strutured Streaming自动将时间戳转换为本地时间

我在UTC和ISO8601中使用了时间戳,但是使用结构化流,它会自动转换为本地时间。有没有办法阻止这种转换?我想在UTC中使用它。

我正在从Kafka中读取json数据,然后使用from_jsonSpark函数对其进行解析。

输入:

{"Timestamp":"2015-01-01T00:00:06.222Z"}

流:

SparkSession

.builder()

.master("local[*]")

.appName("my-app")

.getOrCreate()

.readStream()

.format("kafka")

... //some magic

.writeStream()

.format("console")

.start()

.awaitTermination();

架构:

StructType schema = DataTypes.createStructType(new StructField[] {

DataTypes.createStructField("Timestamp", DataTypes.TimestampType, true),});

输出:

+--------------------+

| Timestamp|

+--------------------+

|2015-01-01 01:00:...|

|2015-01-01 01:00:...|

+--------------------+

如您所见,小时本身已经增加。

PS:我尝试使用from_utc_timestampSpark功能,但没有运气。

回答:

对我来说,它可以使用:

spark.conf.set("spark.sql.session.timeZone", "UTC")

它告诉spark SQL将UTC用作时间戳的默认时区。例如,我在spark SQL中使用了它:

select *, cast('2017-01-01 10:10:10' as timestamp) from someTable

我知道它在2.0.1中不起作用。但适用于Spark 2.2。我SQLTransformer也用了,它起作用了。

我不确定流。

以上是 Spark Strutured Streaming自动将时间戳转换为本地时间 的全部内容, 来源链接: utcz.com/qa/411737.html

回到顶部