栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何使用ParquetWriter将TIMESTAMP逻辑类型(INT96)写入Parquet?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何使用ParquetWriter将TIMESTAMP逻辑类型(INT96)写入Parquet?

我通过使用来自spark
sql的这段代码作为参考来弄清楚了。

INT96二进制编码分为两部分:前8个字​​节为自午夜以来的纳秒,最后4个字节为儒略日

String value = "2019-02-13 13:35:05";final long NANOS_PER_HOUR = TimeUnit.HOURS.tonanos(1);final long NANOS_PER_MINUTE = TimeUnit.MINUTES.tonanos(1);final long NANOS_PER_SECOND = TimeUnit.SECONDS.tonanos(1);// Parse dateSimpleDateFormat parser = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("UTC"));cal.setTime(parser.parse(value));// Calculate Julian days and nanoseconds in the dayLocalDate dt = LocalDate.of(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH)+1, cal.get(Calendar.DAY_OF_MONTH));int julianDays = (int) JulianFields.JULIAN_DAY.getFrom(dt);long nanos = (cal.get(Calendar.HOUR_OF_DAY) * NANOS_PER_HOUR)        + (cal.get(Calendar.MINUTE) * NANOS_PER_MINUTE)        + (cal.get(Calendar.SECOND) * NANOS_PER_SECOND);// Write INT96 timestampbyte[] timestampBuffer = new byte[12];ByteBuffer buf = ByteBuffer.wrap(timestampBuffer);buf.order(ByteOrder.LITTLE_ENDIAN).putLong(nanos).putInt(julianDays);// This is the properly enpred INT96 timestampBinary tsValue = Binary.fromReusedByteArray(timestampBuffer);


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/617200.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号