Skip to content

Commit 61038ea

Browse files
committed
Using Google's cache
1 parent f08c71e commit 61038ea

File tree

1 file changed

+16
-5
lines changed

1 file changed

+16
-5
lines changed

sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/util/DateTimeFormatterHelper.scala

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,9 @@ import java.time.chrono.IsoChronology
2222
import java.time.format.{DateTimeFormatter, DateTimeFormatterBuilder, ResolverStyle}
2323
import java.time.temporal.{ChronoField, TemporalAccessor, TemporalQueries}
2424
import java.util.Locale
25-
import java.util.concurrent.ConcurrentHashMap
25+
import java.util.concurrent.{Callable, TimeUnit}
26+
27+
import com.google.common.cache.CacheBuilder
2628

2729
trait DateTimeFormatterHelper {
2830
protected def toInstantWithZoneId(temporalAccessor: TemporalAccessor, zoneId: ZoneId): Instant = {
@@ -39,11 +41,12 @@ trait DateTimeFormatterHelper {
3941
}
4042

4143
object DateTimeFormatterHelper {
42-
private val cache = new ConcurrentHashMap[(String, Locale), DateTimeFormatter]()
44+
private val cache = CacheBuilder.newBuilder()
45+
.initialCapacity(8)
46+
.maximumSize(128)
47+
.expireAfterAccess(1, TimeUnit.HOURS)
48+
.build[(String, Locale), DateTimeFormatter]()
4349

44-
def getFormatter(pattern: String, locale: Locale): DateTimeFormatter = {
45-
cache.computeIfAbsent((pattern, locale), _ => buildFormatter(pattern, locale))
46-
}
4750

4851
private def buildFormatter(pattern: String, locale: Locale): DateTimeFormatter = {
4952
new DateTimeFormatterBuilder()
@@ -58,4 +61,12 @@ object DateTimeFormatterHelper {
5861
.withChronology(IsoChronology.INSTANCE)
5962
.withResolverStyle(ResolverStyle.STRICT)
6063
}
64+
65+
def getFormatter(pattern: String, locale: Locale): DateTimeFormatter = {
66+
cache.get(
67+
(pattern, locale),
68+
new Callable[DateTimeFormatter]() {
69+
override def call = buildFormatter(pattern, locale)
70+
})
71+
}
6172
}

0 commit comments

Comments
 (0)