当前位置: 首页 > 面试题库 >

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

叶建柏
2023-03-14
问题内容

我在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也用了,它起作用了。

我不确定流。



 类似资料:
  • 我有我的时间戳在UTC和ISO8601,但使用结构化流,它会自动转换成本地时间。有办法阻止这种转换吗?我想要UTC的。 正如你所看到的,小时本身就增加了。 PS:我尝试使用Spark函数,但没有成功。

  • 我已经用FileBeat设置了ELK&我将日志转发到弹性搜索,重写@timestamp字段到日志文件中的时间。下面是它的logstash.conf文件 在上面,我尝试使用以下方法将时间戳的时区设置为IST 但我发现了错误 这是为了避免kibana将时间戳转换为我的本地时区,因为时间戳已经在本地时区IST中。 有人能告诉我如何为时间戳设置IST时区或者设置kibana不将时间戳转换为我的本地时区吗?

  • 问题内容: 我有一个毫秒本地本地时间戳,我想将其转换为毫秒本地UTC时间戳。快速浏览一下文档,看起来像这样工作: 有一个更好的方法吗? 问题答案: 使用a 来获取本地纪元处的偏移量,然后将其添加到本地纪元时间戳中。

  • 我有一个Unix历元时间戳(以毫秒为单位),需要获取本地时间的日期字符串。 这是我的代码: 由上述函数生成的原始时间戳和结果日期、小时和所有其他值均以UTC为单位。如何更改代码以在当地时间获取它?

  • 问题内容: 我知道已经有很多关于将UTC时间/日期转换为本地时间/从本地时间转换为答案的帖子,但是没有帮助我弄清楚我的问题是什么。我的问题是:通过具有UTC时间戳,我如何获取本地DateTime?这就是我现在所拥有的,但这只是将时间戳转换为DateTime格式。 编辑:我将UTC时间戳保存在云中,以便每个设备(Android / iOS)都可以查询并将其转换为时区。 问题答案: 试试这个与我一起工

  • 我试图找出如何在Kotlin中将转换为,这在Java中非常简单,但我在Kotlin中找不到任何等效的。 例如:历元时间戳(1970-01-01以来的秒数)== 在Kotlin中是否有解决方案,或者我是否必须在Kotln中使用Java语法?请给我一个简单的例子来说明如何解决这个问题。提前谢谢。 这个链接不是我问题的答案