- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有具有单列时间戳列的 avro 数据,现在我正在尝试在 avro 文件之上创建外部配置单元表。数据会保存在 avro 中,我希望 avro 逻辑类型能够处理转换回来当我查询配置单元表时添加时间戳。但这并没有发生在它简单地返回 long 值时。我怎样才能让它按预期工作?
PS:我正在使用 spark 2.3 和 databricks com.databrospark-avro_2.11
<dependency>
<groupId>com.databricks</groupId>
<artifactId>spark-avro_2.11</artifactId>
<version>4.0.0</version>
</dependency>
第 1 步:将时间戳值存储到 avro
val startTs=java.sql.Timestamp.valueOf("2020-05-11 14:17:57.188")
val df=Seq(startTs).toDF
df.write.avro("/test")
val avroDf=spark.read.avro("/test")
avroDf.show(false)
+-------------+
|value |
+-------------+
|1589221077188|
+-------------+
AVSC file generated using avro-tools from the avro data files
test.avsc
{
"type" : "record",
"name" : "topLevelRecord",
"fields" : [ {
"name" : "value",
"type" : "long", "logicalType": "timestamp-millis"
} ]
}
hdfs dfs -copyFromLocal -f test.avsc /tmp/test.avsc
第 2 步:在 AVRO 数据上创建外部 HIVE 表
DROP TABLE IF EXISTS test_a;
CREATE EXTERNAL TABLE test_a
STORED AS AVRO
LOCATION '/tenants/gwm/idr/tmp/test'
TBLPROPERTIES ('avro.schema.url'='/tmp/test.avsc');
msck repair table test_a;
select * from test_a;
+----------------+--+
| test_a.value |
+----------------+--+
| 1589221077188 |
+----------------+--+
我试图获取时间戳值而不是这个长值。
最佳答案
来自 Avro 规范:
timestamp-millis 逻辑类型注释 Avro long,其中 long 存储从 unix 纪元开始的毫秒数,即 1970 年 1 月 1 日 00:00:00.000 UTC。
也许这个链接可以帮到你
Creating a Proper avro schema for timestamp record
另一种方法是从 hive 查询 long 值或将时间戳存储为 Spark 应用程序中的字符串值:
SELECT CONCAT(FROM_UNIXTIME(CAST(SUBSTR(CAST(1589221077188 AS STRING),1,10) AS BIGINT)),'.', SUBSTR(CAST(1589221077188 AS STRING),11,13)) AS timestamp;
SELECT CONCAT(FROM_UNIXTIME(CAST(SUBSTR(CAST(time AS STRING),1,10) AS BIGINT)),'.', SUBSTR(CAST(time AS STRING),11,13)) AS timestamp;
"2020-05-11 14:17:57.188"
希望对您有所帮助。
关于avro 时间戳字段上的配置单元外部表返回时间长,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62078832/
给定一个带有多个 date_time 戳的字符串,我想 提取第一个戳及其前面的文本 候选字符串可以有一个或多个时间戳 后续的 date_time 戳记将被 sep="-" 隔开 后续date_time
是否可以合并从相机拍摄的文本和照片?我想在照片上标记日期和时间,但我在 Google 上找不到任何内容。 最佳答案 使用下面的代码来实现你所需要的。 Bitmap src = Bitm
有没有办法通过 Graph API 戳另一个用户?基于this post ,并使用 Graph Explorer ,我发布到“/USERID/pokes”,我已经授予它(Graph API 应用程序和
我有两个向左浮动的元素。一个是 body 的第一个 child ,另一个是容器的第一个 child ,容器是 body 的第二个 child 。 ...
我是一名优秀的程序员,十分优秀!