Skip to content

Commit b5c614c

Browse files
author
Laurent Perez
committed
Implement TimeStampMicroTZVector for parquet isAdjustedToUTC timestamp columns Kotlin#926
1 parent 54d00e6 commit b5c614c

File tree

1 file changed

+16
-0
lines changed

1 file changed

+16
-0
lines changed

dataframe-arrow/src/main/kotlin/org/jetbrains/kotlinx/dataframe/io/arrowReadingImpl.kt

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,14 @@
11
package org.jetbrains.kotlinx.dataframe.io
22

3+
import kotlinx.datetime.Instant
34
import kotlinx.datetime.LocalDate
45
import kotlinx.datetime.LocalDateTime
56
import kotlinx.datetime.LocalTime
7+
import kotlinx.datetime.TimeZone
68
import kotlinx.datetime.toKotlinLocalDate
79
import kotlinx.datetime.toKotlinLocalDateTime
810
import kotlinx.datetime.toKotlinLocalTime
11+
import kotlinx.datetime.toLocalDateTime
912
import org.apache.arrow.memory.RootAllocator
1013
import org.apache.arrow.vector.BigIntVector
1114
import org.apache.arrow.vector.BitVector
@@ -21,6 +24,7 @@ import org.apache.arrow.vector.LargeVarBinaryVector
2124
import org.apache.arrow.vector.LargeVarCharVector
2225
import org.apache.arrow.vector.NullVector
2326
import org.apache.arrow.vector.SmallIntVector
27+
import org.apache.arrow.vector.TimeStampMicroTZVector
2428
import org.apache.arrow.vector.TimeMicroVector
2529
import org.apache.arrow.vector.TimeMilliVector
2630
import org.apache.arrow.vector.TimeNanoVector
@@ -179,6 +183,16 @@ private fun TimeStampMicroVector.values(range: IntRange): List<LocalDateTime?> =
179183
}
180184
}
181185

186+
private fun TimeStampMicroTZVector.values(range: IntRange): List<LocalDateTime?> =
187+
range.mapIndexed { i, it ->
188+
if (isNull(i)) {
189+
null
190+
} else {
191+
Instant.fromEpochMilliseconds(getObject(it) / 1000)
192+
.toLocalDateTime(TimeZone.of(this.timeZone))
193+
}
194+
}
195+
182196
private fun TimeStampMilliVector.values(range: IntRange): List<LocalDateTime?> =
183197
range.mapIndexed { i, it ->
184198
if (isNull(i)) {
@@ -345,6 +359,8 @@ private fun readField(root: VectorSchemaRoot, field: Field, nullability: Nullabi
345359

346360
is TimeStampMicroVector -> vector.values(range).withTypeNullable(field.isNullable, nullability)
347361

362+
is TimeStampMicroTZVector -> vector.values(range).withTypeNullable(field.isNullable, nullability)
363+
348364
is TimeStampMilliVector -> vector.values(range).withTypeNullable(field.isNullable, nullability)
349365

350366
is TimeStampSecVector -> vector.values(range).withTypeNullable(field.isNullable, nullability)

0 commit comments

Comments
 (0)