blob: 9894a42f441375c73f67c9ce19ff7b81696fba8b [file] [log] [blame]
<!DOCTYPE HTML>
<!-- NewPage -->
<html lang="en">
<head>
<!-- Generated by javadoc -->
<title>SparkExecutorCache</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../../../jquery/jquery-ui.min.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../../../jquery-ui.overrides.css" title="Style">
<script type="text/javascript" src="../../../../script.js"></script>
<script type="text/javascript" src="../../../../jquery/jszip/dist/jszip.min.js"></script>
<script type="text/javascript" src="../../../../jquery/jszip-utils/dist/jszip-utils.min.js"></script>
<!--[if IE]>
<script type="text/javascript" src="../../../../jquery/jszip-utils/dist/jszip-utils-ie.min.js"></script>
<![endif]-->
<script type="text/javascript" src="../../../../jquery/jquery-3.6.1.min.js"></script>
<script type="text/javascript" src="../../../../jquery/jquery-ui.min.js"></script>
</head>
<body>
<script type="text/javascript"><!--
try {
if (location.href.indexOf('is-external=true') == -1) {
parent.document.title="SparkExecutorCache";
}
}
catch(err) {
}
//-->
var data = {"i0":9,"i1":9,"i2":10,"i3":10,"i4":10};
var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
var altColor = "altColor";
var rowColor = "rowColor";
var tableTab = "tableTab";
var activeTableTab = "activeTableTab";
var pathtoroot = "../../../../";
var useModuleDirectories = true;
loadScripts(document, 'script');</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<header role="banner">
<nav role="navigation">
<div class="fixedNav">
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="topNav"><a id="navbar.top">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
<a id="navbar.top.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../index.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../index-all.html">Index</a></li>
<li><a href="../../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList" id="allclasses_navbar_top">
<li><a href="../../../../allclasses.html">All&nbsp;Classes</a></li>
</ul>
<ul class="navListSearch">
<li><label for="search">SEARCH:</label>
<input type="text" id="search" value="search" disabled="disabled">
<input type="reset" id="reset" value="reset" disabled="disabled">
</li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_top");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a id="skip.navbar.top">
<!-- -->
</a></div>
<!-- ========= END OF TOP NAVBAR ========= -->
</div>
<div class="navPadding">&nbsp;</div>
<script type="text/javascript"><!--
$('.navPadding').css('padding-top', $('.fixedNav').css("height"));
//-->
</script>
</nav>
</header>
<!-- ======== START OF CLASS DATA ======== -->
<main role="main">
<div class="header">
<div class="subTitle"><span class="packageLabelInType">Package</span>&nbsp;<a href="package-summary.html">org.apache.iceberg.spark</a></div>
<h2 title="Class SparkExecutorCache" class="title">Class SparkExecutorCache</h2>
</div>
<div class="contentContainer">
<ul class="inheritance">
<li>java.lang.Object</li>
<li>
<ul class="inheritance">
<li>org.apache.iceberg.spark.SparkExecutorCache</li>
</ul>
</li>
</ul>
<div class="description">
<ul class="blockList">
<li class="blockList">
<hr>
<pre>public class <span class="typeNameLabel">SparkExecutorCache</span>
extends java.lang.Object</pre>
<div class="block">An executor cache for reducing the computation and IO overhead in tasks.
<p>The cache is configured and controlled through Spark SQL properties. It supports both limits
on the total cache size and maximum size for individual entries. Additionally, it implements
automatic eviction of entries after a specified duration of inactivity. The cache will respect
the SQL configuration valid at the time of initialization. All subsequent changes to the
configuration will have no effect.
<p>The cache is accessed and populated via <a href="#getOrLoad(java.lang.String,java.lang.String,java.util.function.Supplier,long)"><code>getOrLoad(String, String, Supplier, long)</code></a>. If
the value is not present in the cache, it is computed using the provided supplier and stored in
the cache, subject to the defined size constraints. When a key is added, it must be associated
with a particular group ID. Once the group is no longer needed, it is recommended to explicitly
invalidate its state by calling <a href="#invalidate(java.lang.String)"><code>invalidate(String)</code></a> instead of relying on automatic
eviction.
<p>Note that this class employs the singleton pattern to ensure only one cache exists per JVM.</div>
</li>
</ul>
</div>
<div class="summary">
<ul class="blockList">
<li class="blockList">
<!-- ========== METHOD SUMMARY =========== -->
<section>
<ul class="blockList">
<li class="blockList"><a id="method.summary">
<!-- -->
</a>
<h3>Method Summary</h3>
<table class="memberSummary">
<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t1" class="tableTab"><span><a href="javascript:show(1);">Static Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colSecond" scope="col">Method</th>
<th class="colLast" scope="col">Description</th>
</tr>
<tr id="i0" class="altColor">
<td class="colFirst"><code>static <a href="SparkExecutorCache.html" title="class in org.apache.iceberg.spark">SparkExecutorCache</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#get()">get</a></span>()</code></th>
<td class="colLast">
<div class="block">Returns the cache if already created or null otherwise.</div>
</td>
</tr>
<tr id="i1" class="rowColor">
<td class="colFirst"><code>static <a href="SparkExecutorCache.html" title="class in org.apache.iceberg.spark">SparkExecutorCache</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getOrCreate()">getOrCreate</a></span>()</code></th>
<td class="colLast">
<div class="block">Returns the cache if created or creates and returns it.</div>
</td>
</tr>
<tr id="i2" class="altColor">
<td class="colFirst"><code>&lt;V&gt;&nbsp;V</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getOrLoad(java.lang.String,java.lang.String,java.util.function.Supplier,long)">getOrLoad</a></span>&#8203;(java.lang.String&nbsp;group,
java.lang.String&nbsp;key,
java.util.function.Supplier&lt;V&gt;&nbsp;valueSupplier,
long&nbsp;valueSize)</code></th>
<td class="colLast">
<div class="block">Gets the cached value for the key or populates the cache with a new mapping.</div>
</td>
</tr>
<tr id="i3" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#invalidate(java.lang.String)">invalidate</a></span>&#8203;(java.lang.String&nbsp;group)</code></th>
<td class="colLast">
<div class="block">Invalidates all keys associated with the given group ID.</div>
</td>
</tr>
<tr id="i4" class="altColor">
<td class="colFirst"><code>long</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#maxEntrySize()">maxEntrySize</a></span>()</code></th>
<td class="colLast">
<div class="block">Returns the max entry size in bytes that will be considered for caching.</div>
</td>
</tr>
</table>
<ul class="blockList">
<li class="blockList"><a id="methods.inherited.from.class.java.lang.Object">
<!-- -->
</a>
<h3>Methods inherited from class&nbsp;java.lang.Object</h3>
<code>clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</code></li>
</ul>
</li>
</ul>
</section>
</li>
</ul>
</div>
<div class="details">
<ul class="blockList">
<li class="blockList">
<!-- ============ METHOD DETAIL ========== -->
<section>
<ul class="blockList">
<li class="blockList"><a id="method.detail">
<!-- -->
</a>
<h3>Method Detail</h3>
<a id="getOrCreate()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getOrCreate</h4>
<pre class="methodSignature">public static&nbsp;<a href="SparkExecutorCache.html" title="class in org.apache.iceberg.spark">SparkExecutorCache</a>&nbsp;getOrCreate()</pre>
<div class="block">Returns the cache if created or creates and returns it.
<p>Note this method returns null if caching is disabled.</div>
</li>
</ul>
<a id="get()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>get</h4>
<pre class="methodSignature">public static&nbsp;<a href="SparkExecutorCache.html" title="class in org.apache.iceberg.spark">SparkExecutorCache</a>&nbsp;get()</pre>
<div class="block">Returns the cache if already created or null otherwise.</div>
</li>
</ul>
<a id="maxEntrySize()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>maxEntrySize</h4>
<pre class="methodSignature">public&nbsp;long&nbsp;maxEntrySize()</pre>
<div class="block">Returns the max entry size in bytes that will be considered for caching.</div>
</li>
</ul>
<a id="getOrLoad(java.lang.String,java.lang.String,java.util.function.Supplier,long)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getOrLoad</h4>
<pre class="methodSignature">public&nbsp;&lt;V&gt;&nbsp;V&nbsp;getOrLoad&#8203;(java.lang.String&nbsp;group,
java.lang.String&nbsp;key,
java.util.function.Supplier&lt;V&gt;&nbsp;valueSupplier,
long&nbsp;valueSize)</pre>
<div class="block">Gets the cached value for the key or populates the cache with a new mapping.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>group</code> - a group ID</dd>
<dd><code>key</code> - a cache key</dd>
<dd><code>valueSupplier</code> - a supplier to compute the value</dd>
<dd><code>valueSize</code> - an estimated memory size of the value in bytes</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the cached or computed value</dd>
</dl>
</li>
</ul>
<a id="invalidate(java.lang.String)">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>invalidate</h4>
<pre class="methodSignature">public&nbsp;void&nbsp;invalidate&#8203;(java.lang.String&nbsp;group)</pre>
<div class="block">Invalidates all keys associated with the given group ID.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>group</code> - a group ID</dd>
</dl>
</li>
</ul>
</li>
</ul>
</section>
</li>
</ul>
</div>
</div>
</main>
<!-- ========= END OF CLASS DATA ========= -->
<footer role="contentinfo">
<nav role="navigation">
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<div class="bottomNav"><a id="navbar.bottom">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
<a id="navbar.bottom.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../index.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../index-all.html">Index</a></li>
<li><a href="../../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList" id="allclasses_navbar_bottom">
<li><a href="../../../../allclasses.html">All&nbsp;Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_bottom");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a id="skip.navbar.bottom">
<!-- -->
</a></div>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
</nav>
</footer>
</body>
</html>