<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Insights - TantusData</title>
	<atom:link href="https://tantusdata.com/insights/feed/" rel="self" type="application/rss+xml" />
	<link>https://tantusdata.com/insights/</link>
	<description>That uncovers wisdom.</description>
	<lastBuildDate>Wed, 23 Jul 2025 11:37:51 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.7.1</generator>

<image>
	<url>https://tantusdata.com/app/uploads/2023/01/cropped-Favicon-32x32.png</url>
	<title>Insights - TantusData</title>
	<link>https://tantusdata.com/insights/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Speeding up chatbot with tools</title>
		<link>https://tantusdata.com/insights/speeding-up-chatbot-with-tools/</link>
		
		<dc:creator><![CDATA[TantusData]]></dc:creator>
		<pubDate>Wed, 23 Jul 2025 11:37:50 +0000</pubDate>
				<category><![CDATA[Chatbot Development]]></category>
		<category><![CDATA[LangChain]]></category>
		<category><![CDATA[LLM]]></category>
		<category><![CDATA[UserExperience]]></category>
		<guid isPermaLink="false">https://tantusdata.com/?post_type=insights&#038;p=2197</guid>

					<description><![CDATA[<p>OVERVIEW Large Language Models (LLMs) can now use plug-ins to access extra tools. But they often respond slowly when these tools are used. This hurts the user experience.&#160; In this post, we’ll show a simple trick that speeds up LLM responses. It will help you build more practical and efficient LLM-based solutions. GOALS EXAMPLE USE [&#8230;]</p>
<p>The post <a href="https://tantusdata.com/insights/speeding-up-chatbot-with-tools/">Speeding up chatbot with tools</a> appeared first on <a href="https://tantusdata.com">TantusData</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image"><img decoding="async" src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXc1AF3CGgfuNmwVPLWtVJwzZ9jqlQ_zgPhfyRLY3gS_mHU5ojNTpe_Evbw35j9jxpcQJytuG3hzvZaBY4GOu5mJUerTZCQ4LKdlxTAFraAW3mAn4dw9GFPrECWQbZRcOLQW4a8IVw?key=dws2ubo1QasOI7JwnJrYJuDE" alt=""/></figure>



<h2 class="wp-block-heading"><strong>OVERVIEW</strong></h2>



<p>Large Language Models (LLMs) can now use plug-ins to access extra tools. But they often respond slowly when these tools are used. This hurts the user experience.&nbsp;</p>



<p>In this post, we’ll show a simple trick that speeds up LLM responses. It will help you build more practical and efficient LLM-based solutions.</p>



<h2 class="wp-block-heading"><strong>GOALS</strong></h2>



<ol class="wp-block-list">
<li> Speed up bot answers.</li>
</ol>



<h2 class="wp-block-heading"><strong>EXAMPLE USE CASE</strong></h2>



<p>Let’s say we’re using OpenAI’s ChatGPT via langchain for our holiday rental website where people can talk with chat asking about our website&#8217;s current holiday offer or some general geography information. We leave the geography part solely to the LLM, but the one with showing our deals we have to implement on our end. Langchain gives this possibility by using <a href="https://python.langchain.com/docs/concepts/tools/">tools</a>.&nbsp;</p>



<p>Let’s say our chatbot function looks already like this:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="def get_chatbot_answer(user_message: str) -&gt; str" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #9CDCFE">def</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">get_chatbot_answer</span><span style="color: #D4D4D4">(</span><span style="color: #9CDCFE">user_message</span><span style="color: #D4D4D4">: </span><span style="color: #9CDCFE">str</span><span style="color: #D4D4D4">) -&gt; </span><span style="color: #9CDCFE">str</span></span></code></pre></div>



<p></p>



<p>and the chat has a tool function that looks like this:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="def get_holiday_offers(place: str, month: str) -&gt; str" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #9CDCFE">def</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">get_holiday_offers</span><span style="color: #D4D4D4">(</span><span style="color: #9CDCFE">place</span><span style="color: #D4D4D4">: </span><span style="color: #9CDCFE">str</span><span style="color: #D4D4D4">, </span><span style="color: #9CDCFE">month</span><span style="color: #D4D4D4">: </span><span style="color: #9CDCFE">str</span><span style="color: #D4D4D4">) -&gt; </span><span style="color: #9CDCFE">str</span></span></code></pre></div>



<p></p>



<p>While they’re very easy to use and applicable in this case, the time spent processing tool responses by LLM can be huge. Huge enough to discourage some users from using our chatbot..<br></p>



<h2 class="wp-block-heading"><strong>SOLUTION</strong></h2>



<p>We can divide our chatbot into 2 chatbots, one that will do the same as original, and the other that will decide if we’re using the first one, or the user just wants to get holiday offers (that way we don’t have to use the first, long one). In the other case, we can use the tool ourselves.</p>



<p>So, we can firstly create the first chatbot, that will return 3 outputs, (we can use <a href="https://python.langchain.com/docs/concepts/structured_outputs/">structured output</a> for that). It will look like this:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="def chatbot_preprocessing(user_message: str) -&gt; (bool, str, str)" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #9CDCFE">def</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">chatbot_preprocessing</span><span style="color: #D4D4D4">(</span><span style="color: #9CDCFE">user_message</span><span style="color: #D4D4D4">: </span><span style="color: #9CDCFE">str</span><span style="color: #D4D4D4">) -&gt; (</span><span style="color: #9CDCFE">bool</span><span style="color: #D4D4D4">, </span><span style="color: #9CDCFE">str</span><span style="color: #D4D4D4">, </span><span style="color: #9CDCFE">str</span><span style="color: #D4D4D4">)</span></span></code></pre></div>



<p></p>



<p>and will return boolean if the user only wants to see holiday offers, and 2 next variables are place, and month respectively (we only care about those if the boolean is true). Now we can change a flow of our chat a bit:<br><span id="docs-internal-guid-b803e045-7fff-f42a-203a-38793c4e4aca" style="white-space: normal;"></span><span id="docs-internal-guid-b803e045-7fff-f42a-203a-38793c4e4aca" style="white-space: normal;"></span></p>



<p class="has-text-align-center"></p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="def get_chatbot_answer_with_preprocessing(user_message: str) -&gt; str:
	only_show_offers, place, month = chatbot_preprocessing(user_message)
	if only_show_offers:
		return get_holiday_offers(place, month)
	else:
		return get_chatbot_answer(user_message)" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #9CDCFE">def</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">get_chatbot_answer_with_preprocessing</span><span style="color: #D4D4D4">(</span><span style="color: #9CDCFE">user_message</span><span style="color: #D4D4D4">: </span><span style="color: #9CDCFE">str</span><span style="color: #D4D4D4">) -&gt; </span><span style="color: #C8C8C8">str</span><span style="color: #D4D4D4">:</span></span>
<span class="line"><span style="color: #D4D4D4">	</span><span style="color: #9CDCFE">only_show_offers</span><span style="color: #D4D4D4">, </span><span style="color: #9CDCFE">place</span><span style="color: #D4D4D4">, </span><span style="color: #9CDCFE">month</span><span style="color: #D4D4D4"> = </span><span style="color: #DCDCAA">chatbot_preprocessing</span><span style="color: #D4D4D4">(</span><span style="color: #9CDCFE">user_message</span><span style="color: #D4D4D4">)</span></span>
<span class="line"><span style="color: #D4D4D4">	</span><span style="color: #C586C0">if</span><span style="color: #D4D4D4"> </span><span style="color: #C8C8C8">only_show_offers</span><span style="color: #D4D4D4">:</span></span>
<span class="line"><span style="color: #D4D4D4">		</span><span style="color: #C586C0">return</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">get_holiday_offers</span><span style="color: #D4D4D4">(</span><span style="color: #9CDCFE">place</span><span style="color: #D4D4D4">, </span><span style="color: #9CDCFE">month</span><span style="color: #D4D4D4">)</span></span>
<span class="line"><span style="color: #D4D4D4">	</span><span style="color: #C586C0">else</span><span style="color: #D4D4D4">:</span></span>
<span class="line"><span style="color: #D4D4D4">		</span><span style="color: #C586C0">return</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">get_chatbot_answer</span><span style="color: #D4D4D4">(</span><span style="color: #9CDCFE">user_message</span><span style="color: #D4D4D4">)</span></span></code></pre></div>



<p class="has-text-align-center"></p>



<p></p>



<p>This way, if the user wants only offers (which is probably more than half the time), the chatbot answers very quickly, because it avoids processing the result by the LLM.</p>



<h2 class="wp-block-heading"><strong>CONCLUSION</strong></h2>



<p>It’s very possible to speed up chat conversation not only by getting faster hardware, but also by using some tricks. That particular trick helps a lot with simple chatbots that are made to help website users to quickly see all the available products and services.<br><br></p>



<figure class="wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex"></figure>
<p>The post <a href="https://tantusdata.com/insights/speeding-up-chatbot-with-tools/">Speeding up chatbot with tools</a> appeared first on <a href="https://tantusdata.com">TantusData</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>LLMs and LangChain &#8211; Getting Started Guide </title>
		<link>https://tantusdata.com/insights/llms-and-langchain-getting-started-guide/</link>
		
		<dc:creator><![CDATA[TantusData]]></dc:creator>
		<pubDate>Thu, 17 Apr 2025 14:10:06 +0000</pubDate>
				<category><![CDATA[ChatBot]]></category>
		<category><![CDATA[ChatGPT]]></category>
		<category><![CDATA[Custom LLM Integration]]></category>
		<category><![CDATA[Embeddings]]></category>
		<category><![CDATA[LangChain]]></category>
		<category><![CDATA[LLM]]></category>
		<category><![CDATA[RAG]]></category>
		<category><![CDATA[Workshops]]></category>
		<guid isPermaLink="false">https://tantusdata.com/?post_type=insights&#038;p=2194</guid>

					<description><![CDATA[<p>Hands-on workshop on building GPT-powered apps with LangChain, Agents, embeddings, and vector databases. Learn to create accurate, real-time AI solutions.</p>
<p>The post <a href="https://tantusdata.com/insights/llms-and-langchain-getting-started-guide/">LLMs and LangChain &#8211; Getting Started Guide </a> appeared first on <a href="https://tantusdata.com">TantusData</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image"><img decoding="async" src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXdkblVpi4RIKkpplA394yrz2huIAU6Cfitr1RakjnO_eE2nRGj3S-6ayAhDFv625mPcvx8Tc3yWP4A2zmQ5CR-FvdjI0H0Mb55r2bp4jmGHhLG41xLyLH8_H7FDUN9qMTHchkO1?key=hPVoxYPm7EKr5RpXGhisew2k" alt=""/></figure>



<p></p>



<p>During their workshop at Big Data Conference Europe, <strong>Marcin and Bartek</strong> guided participants through the essentials of GPT-powered LLM applications. By the end of the session, attendees had a solid grasp of developing with Chains and powerful reasoning Agents, integrating external APIs and context sources, and building solutions that excel in question-answering over documents—all with a focus on accuracy and safety.</p>



<h2 class="wp-block-heading"><strong>What it covered:&nbsp;</strong></h2>



<ul class="wp-block-list">
<li><strong>Foundations of LLMs:</strong> Participants discovered which Large Language Models best suited different needs and how to apply them effectively.</li>



<li><strong>LangChain Essentials:</strong> They gained a solid understanding of the LangChain API and learned how Chains and Agents can drive dynamic, intelligent behavior in applications.</li>



<li><strong>Context and Integrations:</strong> Attendees explored how to integrate external APIs, pass context between components, and leverage vector databases for advanced features.</li>



<li><strong>Question Answering with Your Own Data:</strong> They used embeddings and combined ChatGPT, VectorDb, and LangChain to develop robust question-answering systems.</li>



<li><strong>Reasoning Agents:</strong> Participants examined how Agents can utilize real-time tools such as Google Search or Wolfram Alpha for powerful, on-the-fly problem-solving.</li>



<li><strong>Accuracy and Safety:</strong> They delved into techniques for self-querying, hallucination checks, and output moderation to ensure reliable application performance.</li>



<li><strong>Tuning and Production:</strong> Finally, they got a glimpse into real-world deployment, from optimizing embeddings to managing inference and costs.</li>
</ul>



<p></p>



<h2 class="wp-block-heading"><strong>Missed the Session? Don’t Worry!</strong></h2>



<p>Couldn’t make it to our workshop at Big Data Conference Europe? We’ve got you covered. We can bring the same interactive experience straight to your team.</p>



<p></p>



<h2 class="wp-block-heading"><strong>By the End of This Workshop, You Will:</strong></h2>



<ul class="wp-block-list">
<li>Gain a strong understanding of ChatGPT-powered LLM applications.</li>



<li>Master the LangChain API to build and orchestrate Chains and Agents for complex decision-making.</li>



<li>Develop real-world applications integrating external APIs and data.</li>



<li>Build reasoning Agents that tackle dynamic problems in real-time.</li>



<li>Implement crucial techniques for application safety and accuracy.</li>



<li>Combine ChatGPT, VectorDb, and LangChain into powerful question-answering systems.</li>



<li>Level up your AI skills and transform your creative ideas into functional, future-ready solutions.</li>
</ul>



<p></p>



<h2 class="wp-block-heading"><strong>Hands-On Agenda</strong></h2>



<ol class="wp-block-list">
<li><strong>Introduction</strong>
<ul class="wp-block-list">
<li>Overview of various LLMs – what’s good for your use case?</li>



<li>Introduction to LangChain</li>
</ul>
</li>



<li><strong>Building with Chains and Agents</strong>
<ul class="wp-block-list">
<li>LangChain API</li>



<li>Passing context between components</li>



<li>Integrations with external APIs and data sources</li>



<li>Comparing Chains vs. Agents</li>
</ul>
</li>



<li><strong>Question Answering Over Documents</strong>
<ul class="wp-block-list">
<li>Introduction to embeddings</li>



<li>Overview of vector databases</li>



<li>Converting documents to vectors (plus common gotchas)</li>



<li>Building a simple application with ChatGPT, VectorDb, and LangChain</li>
</ul>
</li>



<li><strong>Creating Powerful Reasoning Agents</strong>
<ul class="wp-block-list">
<li>Dynamic decision-making</li>



<li>Integrations with tools (e.g., Google Search, Wolfram Alpha)</li>
</ul>
</li>



<li><strong>Summary &amp; Best Practices</strong>
<ul class="wp-block-list">
<li>Techniques for improving accuracy and safety: self-querying, hallucination checks, and output moderation</li>



<li>LLM in production: key challenges and how to tackle them</li>



<li>Potentials for tuning: embeddings, inference optimization, cost management</li>
</ul>
</li>
</ol>



<p></p>



<h2 class="wp-block-heading"><strong>Ready for a Custom Workshop?</strong></h2>



<p>Looking to tailor this session to your organization’s specific needs? We can help. <strong><a href="https://tantusdata.com/contact-us/">Contact us</a></strong> to explore how we can design a workshop that unleashes the power of generative AI for your projects. Let’s build the future together!<br><br></p>



<p></p>
<p>The post <a href="https://tantusdata.com/insights/llms-and-langchain-getting-started-guide/">LLMs and LangChain &#8211; Getting Started Guide </a> appeared first on <a href="https://tantusdata.com">TantusData</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Vendor lock-in when selecting a Cloud Data Platform architecture.</title>
		<link>https://tantusdata.com/insights/vendor-lock-in-when-selecting-a-cloud-data-platform-architecture/</link>
		
		<dc:creator><![CDATA[Marcin Szymaniuk]]></dc:creator>
		<pubDate>Wed, 09 Apr 2025 13:13:19 +0000</pubDate>
				<category><![CDATA[CloudMigration]]></category>
		<category><![CDATA[CloudStrategy]]></category>
		<category><![CDATA[DataWarehouse]]></category>
		<category><![CDATA[VendorLockIn]]></category>
		<guid isPermaLink="false">https://tantusdata.com/?post_type=insights&#038;p=2189</guid>

					<description><![CDATA[<p>Cloud Data Platform migrations come with hidden exit costs. Learn how to reduce vendor lock-in risk through smart architecture and technology choices.</p>
<p>The post <a href="https://tantusdata.com/insights/vendor-lock-in-when-selecting-a-cloud-data-platform-architecture/">Vendor lock-in when selecting a Cloud Data Platform architecture.</a> appeared first on <a href="https://tantusdata.com">TantusData</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image size-full"><img fetchpriority="high" decoding="async" width="960" height="540" src="https://tantusdata.com/app/uploads/2025/04/Grafiki-2.jpg" alt="" class="wp-image-2190" srcset="https://tantusdata.com/app/uploads/2025/04/Grafiki-2.jpg 960w, https://tantusdata.com/app/uploads/2025/04/Grafiki-2-300x169.jpg 300w, https://tantusdata.com/app/uploads/2025/04/Grafiki-2-768x432.jpg 768w" sizes="(max-width: 960px) 100vw, 960px" /></figure>



<p></p>



<h2 class="wp-block-heading">Migrating Data Platform, data warehouse or data lake?</h2>



<p>When deciding to move your data to the cloud, many people focus on costs, expected gains, easier maintenance, or simplified development. Sometimes, lower costs or easier maintenance drive the decision. However, it’s crucial to also consider the potential cost of exiting the cloud. What happens if, at some point, you decide you no longer want to be on a particular cloud platform? This could happen due to rising costs, new technology options, or even legal or political reasons.</p>



<p>Did you know that the exit-cost of your data platform from a Cloud might be a more expensive project than an original migration to the Cloud?<br><br>If you plan to migrate your data platform to the cloud, thinking about future migration costs now is a sign of responsible migration. Understand what will be the cost in terms of dollars, time, and effort if at some point you decide to exit that specific cloud vendor. This means recognizing that exit costs aren’t always obvious and that you’ll need to consider the various aspects of vendor lock-in.<br></p>



<h2 class="wp-block-heading">What exactly are the risks associated with vendor lock-in:</h2>



<ul class="wp-block-list">
<li><strong>Long term costs rise</strong>. If you don’t have an easy to move alternative you are at risk of becoming a hostage.</li>



<li><strong>Lack of flexibility</strong> &#8211; even if your solution is great now you always risk that it will not be developed in the future.&nbsp;</li>



<li><strong>High transfer fees</strong>. Most clouds are charging you if you transfer data from it (egress fee). That needs to be calculated when planning a migration from a specific cloud vendor.</li>



<li><strong>Contractual agreements</strong> &#8211; Vendor lock-in is not only about proprietary technology or data formats. What’s in the contract might be another trap which might become painful in the future.</li>



<li><strong>Lost optimization opportunities &#8211; </strong>there is no such thing as free lunch. Cloud solutions usually are easier to start with but your engineers might lose ability to do low level tuning if you even need that.</li>
</ul>



<p><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-black-color">When planning your cloud migration, don’t overlook the long-term exit costs &#8211; ask your provider about compatibility of specific technology with other tools in the market.&nbsp;</mark><br></p>



<h2 class="wp-block-heading">What can you do to mitigate the risk:</h2>



<ul class="wp-block-list">
<li>Evaluate the technology and alternatives – consider if there are open-source alternatives to your chosen data warehousing solution or if it&#8217;s compatible with other vendors</li>



<li>If you decide on proprietary technology make sure the cost of in and expected exit cost is justified by what you gain (usually easier, faster development)</li>



<li>Consider hybrid cloud. It’s more expensive but gives you more flexibility in the long run.</li>



<li>Consider favouring well-known standards and open source technologies and data formats. A good example is Kubernetes &#8211; it’s a technology which you can have on your own servers as well as with any major cloud providers.</li>
</ul>



<p>Considering moving to the cloud providers, ping me on Linkedin (<a href="https://www.linkedin.com/in/marcin-szymaniuk/">https://www.linkedin.com/in/marcin-szymaniuk/</a>) for specific calculations.</p>



<h2 class="wp-block-heading">Summary</h2>



<p>The data space is moving fast.&nbsp;</p>



<p>Always ask yourself what is the risk that within 5 years you have to migrate again.</p>



<p>Always ask yourself what will happen if you can’t use the selected data platform anymore. How long notice would you need to migrate to another solution?&nbsp;</p>



<p></p>
<p>The post <a href="https://tantusdata.com/insights/vendor-lock-in-when-selecting-a-cloud-data-platform-architecture/">Vendor lock-in when selecting a Cloud Data Platform architecture.</a> appeared first on <a href="https://tantusdata.com">TantusData</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>What you need to know before deploying Open Source LLM</title>
		<link>https://tantusdata.com/insights/what-to-know-before-deploying-open-source-llm/</link>
		
		<dc:creator><![CDATA[Bartek Sadlej]]></dc:creator>
		<pubDate>Sat, 19 Oct 2024 13:57:27 +0000</pubDate>
				<category><![CDATA[Deployment Strategies for LLMs]]></category>
		<category><![CDATA[LLM]]></category>
		<category><![CDATA[LLM Benchmarks Understanding]]></category>
		<category><![CDATA[LLM Licensing]]></category>
		<category><![CDATA[LLM Performance Trade-offs]]></category>
		<category><![CDATA[Open Source LLM Deployment]]></category>
		<guid isPermaLink="false">https://tantusdata.com/?post_type=insights&#038;p=1925</guid>

					<description><![CDATA[<p>Navigating the complexities of deploying open-source Large Language Models (LLMs) can be daunting. From understanding licensing restrictions and making crucial decisions about accuracy, speed, and cost trade-offs, to comprehending benchmark evaluations and exploring deployment strategies, this guide provides essential insights for leveraging open-source LLMs effectively in your projects.</p>
<p>The post <a href="https://tantusdata.com/insights/what-to-know-before-deploying-open-source-llm/">What you need to know before deploying Open Source LLM</a> appeared first on <a href="https://tantusdata.com">TantusData</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="585" src="https://tantusdata.com/app/uploads/2024/03/What-you-need-to-know-before-deploying-Open-Source-LLM-1024x585.jpg" alt="" class="wp-image-2174" srcset="https://tantusdata.com/app/uploads/2024/03/What-you-need-to-know-before-deploying-Open-Source-LLM-1024x585.jpg 1024w, https://tantusdata.com/app/uploads/2024/03/What-you-need-to-know-before-deploying-Open-Source-LLM-300x171.jpg 300w, https://tantusdata.com/app/uploads/2024/03/What-you-need-to-know-before-deploying-Open-Source-LLM-768x439.jpg 768w, https://tantusdata.com/app/uploads/2024/03/What-you-need-to-know-before-deploying-Open-Source-LLM-1536x878.jpg 1536w, https://tantusdata.com/app/uploads/2024/03/What-you-need-to-know-before-deploying-Open-Source-LLM.jpg 1792w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p>There are a few key questions which need to be thoroughly understood and answered before selecting a large language model to be used for building an application:</p>



<ul class="wp-block-list">
<li>License &#8211; because you don’t want to end up in a legal trap</li>



<li>Expectations: accuracy, speed and cost tradeoffs</li>



<li>Understanding of benchmarks the model was evaluated on &#8211; so you don’t get surprised when evaluating the model with your users on your data</li>



<li>Deployment options &#8211; because building a PoC you run on your laptop is often far from production deployment.</li>
</ul>



<h2 class="wp-block-heading">License</h2>



<p>This sounds easy; open source is open, as the name suggests. Well, not exactly. Ensure that the model you choose can be used as you want. For example, there is a statement in the Llama-2 license:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p><em>v. You will not use the Llama Materials or any output or results of the Llama Materials to improve any other large language model (excluding Llama 2 or derivative works thereof)</em>.</p>
</blockquote>



<p>This means that if you start with Llama-2 or its fine-tuned successors and later, at some point in time, decide to switch to a different model, you are not allowed to use your historical data to train the new LLM. Or are you? If you were to modify one line of model code, it is no longer the original <code>Llama Material</code> and so on. In general, AI and code base product regulations are hard to assess and interpret, so it is probably safe to try finding a model with an Apache License or an even more permissive license first, if possible.</p>



<h2 class="wp-block-heading">Define your expectation: accuracy, speed and cost tradeoffs.</h2>



<p>It is tempting to dream big, especially for non-technical people who have seen the recent OpenAI Dev Day with the announcements of GPTs, Assistants and Google Gemini &amp; Lumiere models. But in reality, meeting excessive expectations is challenging and often impossible. Going from 0% to 90% AI automation is difficult but doable; closing the gap between 90% and 100% is exceptionally demanding.</p>



<p>Think about Github Copilot. It won&#8217;t write a project for you, but its blazingly fast few-line completions, which usually require little adjusting, make engineers far more productive.&nbsp;</p>



<p>Ask the question: does my model need to figure out the nitty-gritty details? Or leave some space for users to interact and fill the missing gaps while creating a valuable product.</p>



<p>Maybe some parts of the pipeline can be postponed and implemented as batch jobs? The cost reductions might be significant in this case since closed model providers don&#8217;t offer lower prices for batch requests. In-house LLM allows you to process tasks offline in batches.</p>



<p>The recently released small Open Source LLM, such as Llama-2 and Mistral, or their further fine-tuned versions, like Zephyr and OpenHermes-2.5, are a perfect match for such a scenario. If you cannot compromise on accuracy, maybe there is a way to algorithmically fix weak spots.&nbsp;</p>



<p>On the other hand, it might be valuable to provide users with a few different model outputs or allow them to iterate and guide the suggestions quickly, such as with GithubCopilot. GPT-4 is powerful, but it would take minutes to call it a few times. Smaller models allow you to do such things.&nbsp;<a href="https://huggingface.co/blog/optimum-nvidia" target="_blank" rel="noreferrer noopener">Recent features</a>&nbsp;from Hugging Face and Nvidia can run Llama-v2-13b with an unbelievable speed of 1200 tokens per second.&nbsp;</p>



<h2 class="wp-block-heading">Understand the benchmarks the model was evaluated on</h2>



<p>When choosing the model, you will probably focus on its size, performance, and &#8216;the vibe&#8217; &#8211; whether the model&#8217;s responses generally feel good. The performance is most often checked using the results of well-known benchmarks.</p>



<p>What are the weak spots of this approach?</p>



<p>First, the ML Labs releasing the model does not always publish the training data or even more precise information about what the model was trained on. It is often the case that we only see that &#8216;the model was trained on a well-curated corpus of X tokens&#8217;. And because those benchmarks are so popular, there is a possibility of some leakages into the training set. Not immediately the whole corpus, but for example, an automatic web crawl can contain conversations from Reddit or X/Twitter feeds about a particular task where people are discussing some parts of the benchmark.</p>



<p>Secondly, keep in mind that, in general, it is hard to benchmark written text automatically.&nbsp;&nbsp;</p>



<p>To uncover that, it is crucial to understand how each of those benchmarks is created and what it measures.&nbsp;</p>



<p>Let&#8217;s see an example question from one of the most popular ones, the MMLU (<a href="https://arxiv.org/abs/2009.03300" target="_blank" rel="noreferrer noopener">Massive Multitask Language Understanding</a>):</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Question: Glucose is transported into the muscle cell:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Choices:<br>A. via protein transporters called GLUT4.<br>B. only in the presence of insulin.<br>C. via hexokinase.<br>D. via monocarboxylic acid transporters.</p>
</blockquote>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Correct answer: A</p>
</blockquote>
</blockquote>



<p>And let’s ask ChatGPT:</p>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="676" src="https://tantusdata.com/app/uploads/2024/07/glucose_q-1024x676.jpg" alt="" class="wp-image-2132" srcset="https://tantusdata.com/app/uploads/2024/07/glucose_q-1024x676.jpg 1024w, https://tantusdata.com/app/uploads/2024/07/glucose_q-300x198.jpg 300w, https://tantusdata.com/app/uploads/2024/07/glucose_q-768x507.jpg 768w, https://tantusdata.com/app/uploads/2024/07/glucose_q-1536x1014.jpg 1536w, https://tantusdata.com/app/uploads/2024/07/glucose_q-2048x1352.jpg 2048w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p>Good? The answer is just &#8220;A&#8221;, so even though the model gets it, automatic evaluation would score it as a failure!</p>



<p>Without doing a deep dive into how the evaluation is actually done, there is an excellent&nbsp;<a target="_blank" href="https://huggingface.co/blog/evaluating-mmlu-leaderboard" rel="noreferrer noopener">blog</a>&nbsp;on HuggingFace explaining it in detail; you should just know that it requires taking bare following tokens&#8217; probabilities and using the model through code in a different way than you would interact with it through chat on some WebUI.</p>



<p>So, the key takeaway is that while those benchmarks provide us with a general ranking of models&#8217; performance, one should pay close attention to how they are evaluated and whether this form of evaluation is meaningful for their use case.&nbsp;</p>



<p>For example, ChatGPT is a so-called Instruction-Finetuned model tuned to follow user instructions and interact with them. If you put a phrase:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Can you help me with that:<br>{arbitrary problem description}</p>
</blockquote>



<p>It will very likely start it’s response with:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Certainly! {probably a good solution to your problem}</p>
</blockquote>



<p>And if you were to check tokens probabilities for options A, B, C, and D from the above-mentioned MMLU example, as it is done in one implementation of MMLU, you would get C! But not because the model thinks the completion for the</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Correct answer</p>
</blockquote>



<p>Is C, but because it wants to start with Certainly!</p>



<h2 class="wp-block-heading"><strong>Deployment options</strong></h2>



<p>Last but not least, let&#8217;s talk about inference. When you have chosen and maybe even fine-tuned your model further, it&#8217;s time to answer the question of what exactly you want to deploy and where.</p>



<p>The &#8216;what exactly&#8217; part is essential. To start with, you probably have X billion parameters model in (b)float16. There are two options for improvement here: quantization and pruning.</p>



<p>Quantization converts some 16-bit weights into 8 or 4 bits so you can run the model on a smaller and cheaper GPU. Of course, by doing so, we lose some information and accuracy. It can be done automatically using some general formulas, or you can specify an evaluation dataset to quantize in a way that reduces some metrics the least.</p>



<p>It is important to note that currently, on most hardware, quantization reduces memory usage but reduces inference speed. Although the model weights are much smaller, some values must be cast back and forth. But it allows you to inference/fine-tune the model on cheaper hardware or just the available hardware since it might be hard for new players to get access to A100 &amp; H100 clusters.</p>



<p>Both ways are available in the HuggingFace library and can be easily applied.&nbsp;<a target="_blank" href="https://huggingface.co/blog/overview-quantization-transformers" rel="noreferrer noopener">Here</a>, you can find the blog post going through their pros and cons and inference speed/memory comparison.</p>



<p>Pruning, on the other hand, works by completely removing some weights from the model.</p>



<p>It is important to remember that the transformer model under the hood does matrix multiplication, so you can just remove all entries close to zero and expect the performance to improve because it will cause some non-sequential memory accesses. A more gentle solution is needed. The PyTorch team has recently posted 2&nbsp;<a href="https://pytorch.org/blog/accelerating-generative-ai/" target="_blank" rel="noreferrer noopener">blog posts</a>&nbsp;about accelerating Generativ-AI, where they go into detail about available options.</p>



<h2 class="wp-block-heading">Where to deploy?</h2>



<p>Though for real-time chat applications, data centre deployment or on-premise, with high availability, there are some cost-saving techniques if you have offline steps in your data pipeline.</p>



<p>Currently, everyone runs LLM models on either A10 or A100 / H100, but surprisingly, not so many people know that cards from the RTX family are also a good performance choice for such applications.</p>



<p>Unfortunately, NVIDIA knows that, and they put the following statements in their license.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>No Datacenter Deployment. The SOFTWARE is not licensed for datacenter deployment, except that blockchain processing in a datacenter is permitted.</p>
</blockquote>



<p>But there are companies like&nbsp;<a href="https://vast.ai/" target="_blank" rel="noreferrer noopener">vast.ai</a>&nbsp;which offer RTX cards but with lower reliability than, for example, AWS ec2 instances, which you can use for offline data processing. The default filter for availability here is set to 90%, while on the AWS EC2 Service Level Agreement, commitment is 99.99%.</p>
<p>The post <a href="https://tantusdata.com/insights/what-to-know-before-deploying-open-source-llm/">What you need to know before deploying Open Source LLM</a> appeared first on <a href="https://tantusdata.com">TantusData</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>RDD in Apache Spark</title>
		<link>https://tantusdata.com/insights/rdd-in-apache-spark/</link>
		
		<dc:creator><![CDATA[Amadeusz Kosik]]></dc:creator>
		<pubDate>Fri, 28 Jun 2024 07:33:40 +0000</pubDate>
				<category><![CDATA[Apache Spark]]></category>
		<category><![CDATA[data pipelines]]></category>
		<guid isPermaLink="false">https://tantusdata.com/?post_type=insights&#038;p=2128</guid>

					<description><![CDATA[<p>Learn how to utilize the RDD API in Apache Spark to check partition details or perform low-level operations. Despite being deprecated, the RDD API is accessible via the .rdd method on Datasets and DataFrames. Discover how to check the number of partitions with the getNumPartitions method and determine partition sizes using the glom function. Explore the remaining useful operations that RDD API offers for low-level hacking and internal Spark tasks.</p>
<p>The post <a href="https://tantusdata.com/insights/rdd-in-apache-spark/">RDD in Apache Spark</a> appeared first on <a href="https://tantusdata.com">TantusData</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="512" src="https://tantusdata.com/app/uploads/2024/06/shutterstock_2419641841-1024x512.jpg" alt="" class="wp-image-2185" srcset="https://tantusdata.com/app/uploads/2024/06/shutterstock_2419641841-1024x512.jpg 1024w, https://tantusdata.com/app/uploads/2024/06/shutterstock_2419641841-300x150.jpg 300w, https://tantusdata.com/app/uploads/2024/06/shutterstock_2419641841-768x384.jpg 768w, https://tantusdata.com/app/uploads/2024/06/shutterstock_2419641841-1536x768.jpg 1536w, https://tantusdata.com/app/uploads/2024/06/shutterstock_2419641841-2048x1024.jpg 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>Do you want to see the number of partitions? Or the partition size in rows from within the job? Or maybe you just like some low-level hacking? The RDD API is still there and accessible via the <em>.rdd</em> method.&nbsp;</p>



<h2 class="wp-block-heading">Why is RDD API still around?</h2>



<p>Despite deprecating the RDD API, the engine of Apache Spark (at least its Open Source part &#8211; see our article on Photon), the RDDs are still used in its internals. It is also available via the .<em>rdd</em> method of <em>Datasets</em>, and, therefore, <em>DataFrames</em> as well. Keep in mind, though, that the number of actually useful operations not available from Dataset API is really low, and currently, excluding some low-level or Spark internals hacking, it boils down to partitions count and size checking &#8211; using getNumPartitions method or glom operator, respectively.</p>



<h2 class="wp-block-heading">Check number of partitions</h2>



<p>RDD API still keeps the <a href="https://spark.apache.org/docs/3.2.0/api/scala/org/apache/spark/rdd/RDD.html#getNumPartitions:Int"><em>getNumPartitions</em></a> method for that use case:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="println(inputData.rdd.getNumPartitions)" style="color:#d8dee9ff;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #88C0D0">println</span><span style="color: #D8DEE9FF">(</span><span style="color: #D8DEE9">inputData</span><span style="color: #ECEFF4">.</span><span style="color: #D8DEE9">rdd</span><span style="color: #ECEFF4">.</span><span style="color: #D8DEE9">getNumPartitions</span><span style="color: #D8DEE9FF">)</span></span></code></pre></div>



<p></p>



<h2 class="wp-block-heading">Check number of rows per partition</h2>



<p>The <a href="https://spark.apache.org/docs/3.2.0/api/scala/org/apache/spark/rdd/RDD.html#glom():org.apache.spark.rdd.RDD[Array[T]]"><em>glom</em></a> function coalesces all rows in each partition into an array. It can be used to check the number of rows per partition. In the case of wide rows, consider using <em>select</em> to limit the number of columns—RDD are not optimized by most of Spark’s mechanisms.</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="inputData.rdd.glom().map(_.length).collect().foreach(println _)" style="color:#d8dee9ff;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #D8DEE9">inputData</span><span style="color: #ECEFF4">.</span><span style="color: #D8DEE9">rdd</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">glom</span><span style="color: #D8DEE9FF">()</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">map</span><span style="color: #D8DEE9FF">(</span><span style="color: #D8DEE9">_</span><span style="color: #ECEFF4">.</span><span style="color: #D8DEE9FF">length)</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">collect</span><span style="color: #D8DEE9FF">()</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">foreach</span><span style="color: #D8DEE9FF">(</span><span style="color: #D8DEE9">println</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">_</span><span style="color: #D8DEE9FF">)</span></span></code></pre></div>
<p>The post <a href="https://tantusdata.com/insights/rdd-in-apache-spark/">RDD in Apache Spark</a> appeared first on <a href="https://tantusdata.com">TantusData</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Datasets and DataFrames</title>
		<link>https://tantusdata.com/insights/dtasets-and-dataframes/</link>
		
		<dc:creator><![CDATA[Amadeusz Kosik]]></dc:creator>
		<pubDate>Tue, 11 Jun 2024 06:41:52 +0000</pubDate>
				<category><![CDATA[Apache Spark]]></category>
		<category><![CDATA[data pipelines]]></category>
		<guid isPermaLink="false">https://tantusdata.com/?post_type=insights&#038;p=2105</guid>

					<description><![CDATA[<p>Understanding Spark's .as[T] Method: Best Practices and Defensive Programming</p>
<p>The post <a href="https://tantusdata.com/insights/dtasets-and-dataframes/">Datasets and DataFrames</a> appeared first on <a href="https://tantusdata.com">TantusData</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="576" src="https://tantusdata.com/app/uploads/2024/06/shutterstock_2301467093-1024x576.jpg" alt="" class="wp-image-2106" srcset="https://tantusdata.com/app/uploads/2024/06/shutterstock_2301467093-1024x576.jpg 1024w, https://tantusdata.com/app/uploads/2024/06/shutterstock_2301467093-300x169.jpg 300w, https://tantusdata.com/app/uploads/2024/06/shutterstock_2301467093-768x432.jpg 768w, https://tantusdata.com/app/uploads/2024/06/shutterstock_2301467093-1536x864.jpg 1536w, https://tantusdata.com/app/uploads/2024/06/shutterstock_2301467093-2048x1152.jpg 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>With the deprecation of the public use of the old good RDD API, Spark users are left with two options: typed <em>Datasets</em>and untyped <em>DataFrames </em>(that are actually a specific case of Datasets). The API also allows users to freely cast one to another &#8211; e.g. using the <em>.as[T]</em> method to cast an untyped <em>DataFrame</em> to a <em>Dataset[T]</em>. It does not change the underlying data though and can result in surprising results if one is not aware of that.</p>



<h2 class="wp-block-heading">What does <em>.as[T]</em> do?</h2>



<p>Let’s start by looking at the source (code):</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="Returns a new Dataset where each record has been mapped on to the specified type. The method used to map columns depend on the type of U:
When U is a class, fields for the class will be mapped to columns of the same name (case sensitivity is determined by spark. sql. caseSensitive).
When U is a tuple, the columns will be mapped by ordinal (i. e. the first column will be assigned to _1).
When U is a primitive type (i. e. String, Int, etc), then the first column of the DataFrame will be used.
If the schema of the Dataset does not match the desired U type, you can use select along with alias or as to rearrange or rename as required.
Note that as[] only changes the view of the data that is passed into typed operations, such as map(), and does not eagerly project away any columns that are not present in the specified class.
Since:
1.6.0" style="color:#d8dee9ff;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #D8DEE9">Returns</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">a</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">new</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">Dataset</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">where</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">each</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">record</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">has</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">been</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">mapped</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">on</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">to</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">the</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">specified</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">type</span><span style="color: #ECEFF4">.</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">The</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">method</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">used</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">to</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">map</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">columns</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">depend</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">on</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">the</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">type</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">of</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">U</span><span style="color: #D8DEE9FF">:</span></span>
<span class="line"><span style="color: #D8DEE9">When</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">U</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">is</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">a</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">class</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">fields</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">for</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">the</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">class</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">will</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">be</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">mapped</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">to</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">columns</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">of</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">the</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">same</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">name</span><span style="color: #D8DEE9FF"> (</span><span style="color: #8FBCBB">case</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">sensitivity</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">is</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">determined</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">by</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">spark</span><span style="color: #D8DEE9FF">. </span><span style="color: #8FBCBB">sql</span><span style="color: #D8DEE9FF">. </span><span style="color: #8FBCBB">caseSensitive</span><span style="color: #D8DEE9FF">).</span></span>
<span class="line"><span style="color: #8FBCBB">When</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">U</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">is</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">a</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">tuple</span><span style="color: #D8DEE9FF">, </span><span style="color: #8FBCBB">the</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">columns</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">will</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">be</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">mapped</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">by</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">ordinal</span><span style="color: #D8DEE9FF"> (</span><span style="color: #8FBCBB">i</span><span style="color: #D8DEE9FF">. </span><span style="color: #8FBCBB">e</span><span style="color: #D8DEE9FF">. </span><span style="color: #8FBCBB">the</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">first</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">column</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">will</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">be</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">assigned</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">to</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">_1</span><span style="color: #D8DEE9FF">).</span></span>
<span class="line"><span style="color: #8FBCBB">When</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">U</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">is</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">a</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">primitive</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">type</span><span style="color: #D8DEE9FF"> (</span><span style="color: #8FBCBB">i</span><span style="color: #D8DEE9FF">. </span><span style="color: #8FBCBB">e</span><span style="color: #D8DEE9FF">. </span><span style="color: #8FBCBB">String</span><span style="color: #D8DEE9FF">, </span><span style="color: #8FBCBB">Int</span><span style="color: #D8DEE9FF">, </span><span style="color: #8FBCBB">etc</span><span style="color: #D8DEE9FF">), </span><span style="color: #8FBCBB">then</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">the</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">first</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">column</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">of</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">the</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">DataFrame</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">will</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">be</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">used</span><span style="color: #D8DEE9FF">.</span></span>
<span class="line"><span style="color: #8FBCBB">If</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">the</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">schema</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">of</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">the</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">Dataset</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">does</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">not</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">match</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">the</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">desired</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">U</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">type</span><span style="color: #D8DEE9FF">, </span><span style="color: #8FBCBB">you</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">can</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">use</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">select</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">along</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">with</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">alias</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">or</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">as</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">to</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">rearrange</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">or</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">rename</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">as</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">required</span><span style="color: #D8DEE9FF">.</span></span>
<span class="line"><span style="color: #8FBCBB">Note</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">that</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">as</span><span style="color: #D8DEE9FF">[] </span><span style="color: #8FBCBB">only</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">changes</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">the</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">view</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">of</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">the</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">data</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">that</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">is</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">passed</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">into</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">typed</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">operations</span><span style="color: #D8DEE9FF">, </span><span style="color: #8FBCBB">such</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">as</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">map</span><span style="color: #D8DEE9FF">(), </span><span style="color: #8FBCBB">and</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">does</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">not</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">eagerly</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">project</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">away</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">any</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">columns</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">that</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">are</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">not</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">present</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">in</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">the</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">specified</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">class</span><span style="color: #D8DEE9FF">.</span></span>
<span class="line"><span style="color: #8FBCBB">Since</span><span style="color: #D8DEE9FF">:</span></span>
<span class="line"><span style="color: #D8DEE9FF">1.6.0</span></span></code></pre></div>



<p></p>



<p>The last note is crucial: casting to a <em>Dataset</em> does not change the underlying data. Any columns not present in the <em>T</em> (e.g., columns without a corresponding field in the case class) will not be discarded.</p>



<h2 class="wp-block-heading">Why bother?</h2>



<p>There are a few situations where having extra columns may be surprising and create problems with a job run (or even worse &#8211; silently introduce data quality issues):</p>



<ul class="wp-block-list">
<li>running <em>union</em> or <em>unionAll</em> transformations on non-aligned data,</li>



<li>calling <em>distinct</em> (it will check for hidden columns’ uniqueness as well),</li>



<li>saving data (will include extra columns).</li>
</ul>



<h2 class="wp-block-heading">A defensive version of <em>.as[T]</em>&nbsp;</h2>



<p>The simple version of a defensive (meaning: adjusting the schema to the provided domain class) would be one with a <em>.select()</em> transformation call:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="case class Artist(id: String, name: String, location: String)

def toArtistsDefensive(input: DataFrame): Dataset[Artist] = { input
  .select(&quot;id&quot;, &quot;name&quot;, &quot;location&quot;)
  .as[Artist]
}" style="color:#d8dee9ff;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #81A1C1">case</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">class</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">Artist</span><span style="color: #D8DEE9FF">(</span><span style="color: #8FBCBB">id</span><span style="color: #D8DEE9FF">: </span><span style="color: #8FBCBB">String</span><span style="color: #D8DEE9FF">, </span><span style="color: #8FBCBB">name</span><span style="color: #D8DEE9FF">: </span><span style="color: #8FBCBB">String</span><span style="color: #D8DEE9FF">, </span><span style="color: #8FBCBB">location</span><span style="color: #D8DEE9FF">: </span><span style="color: #8FBCBB">String</span><span style="color: #D8DEE9FF">)</span></span>
<span class="line"></span>
<span class="line"><span style="color: #8FBCBB">def</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">toArtistsDefensive</span><span style="color: #D8DEE9FF">(</span><span style="color: #8FBCBB">input</span><span style="color: #D8DEE9FF">: </span><span style="color: #8FBCBB">DataFrame</span><span style="color: #D8DEE9FF">): </span><span style="color: #8FBCBB">Dataset</span><span style="color: #D8DEE9FF">[</span><span style="color: #8FBCBB">Artist</span><span style="color: #D8DEE9FF">] = </span><span style="color: #ECEFF4">{</span><span style="color: #D8DEE9FF"> input</span></span>
<span class="line"><span style="color: #D8DEE9FF">  </span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">select</span><span style="color: #D8DEE9FF">(</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">id</span><span style="color: #ECEFF4">&quot;</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">name</span><span style="color: #ECEFF4">&quot;</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">location</span><span style="color: #ECEFF4">&quot;</span><span style="color: #D8DEE9FF">)</span></span>
<span class="line"><span style="color: #D8DEE9FF">  </span><span style="color: #ECEFF4">.</span><span style="color: #D8DEE9">as</span><span style="color: #D8DEE9FF">[</span><span style="color: #D8DEE9">Artist</span><span style="color: #D8DEE9FF">]</span></span>
<span class="line"><span style="color: #ECEFF4">}</span></span></code></pre></div>



<p></p>



<p>This is a very DRY-unfriendly implementation, as each modification of the <em>Artists</em> class requires searching for all related <em>select</em> instances and updating them. Fortunately, with a bit of reflection, it can be refactored into a generic solution. This generic transformation will trim the Dataset to contain only the expected columns.</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="import scala.reflect.runtime.universe._

def toTDefensive[T &lt;: Product: TypeTag](input: DataFrame): Dataset[T] = { 
  val caseClassFields = typeOf[T].members
    .collect { case m: MethodSymbol if m.isCaseAccessor =&gt; m.name.toString }
    .toSeq
  
  val columns = caseClassFields
    .map(F.col _)
    .reverse

  input
    .select(columns: _*)
    .as[T]
}" style="color:#d8dee9ff;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #81A1C1">import</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">scala</span><span style="color: #D8DEE9FF">.</span><span style="color: #8FBCBB">reflect</span><span style="color: #D8DEE9FF">.</span><span style="color: #8FBCBB">runtime</span><span style="color: #D8DEE9FF">.</span><span style="color: #8FBCBB">universe</span><span style="color: #D8DEE9FF">.</span><span style="color: #8FBCBB">_</span></span>
<span class="line"></span>
<span class="line"><span style="color: #8FBCBB">def</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">toTDefensive</span><span style="color: #D8DEE9FF">[</span><span style="color: #8FBCBB">T</span><span style="color: #D8DEE9FF"> &lt;: </span><span style="color: #8FBCBB">Product</span><span style="color: #D8DEE9FF">: </span><span style="color: #8FBCBB">TypeTag</span><span style="color: #D8DEE9FF">](</span><span style="color: #8FBCBB">input</span><span style="color: #D8DEE9FF">: </span><span style="color: #8FBCBB">DataFrame</span><span style="color: #D8DEE9FF">): </span><span style="color: #8FBCBB">Dataset</span><span style="color: #D8DEE9FF">[</span><span style="color: #8FBCBB">T</span><span style="color: #D8DEE9FF">] = </span><span style="color: #ECEFF4">{</span><span style="color: #D8DEE9FF"> </span></span>
<span class="line"><span style="color: #D8DEE9FF">  </span><span style="color: #8FBCBB">val</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">caseClassFields</span><span style="color: #D8DEE9FF"> = </span><span style="color: #8FBCBB">typeOf</span><span style="color: #D8DEE9FF">[</span><span style="color: #8FBCBB">T</span><span style="color: #D8DEE9FF">].</span><span style="color: #8FBCBB">members</span></span>
<span class="line"><span style="color: #D8DEE9FF">    .</span><span style="color: #8FBCBB">collect</span><span style="color: #D8DEE9FF"> { </span><span style="color: #8FBCBB">case</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">m</span><span style="color: #D8DEE9FF">: </span><span style="color: #8FBCBB">MethodSymbol</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">if</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">m</span><span style="color: #D8DEE9FF">.</span><span style="color: #8FBCBB">isCaseAccessor</span><span style="color: #D8DEE9FF"> =&gt; </span><span style="color: #8FBCBB">m</span><span style="color: #D8DEE9FF">.</span><span style="color: #8FBCBB">name</span><span style="color: #D8DEE9FF">.</span><span style="color: #8FBCBB">toString</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">}</span></span>
<span class="line"><span style="color: #D8DEE9FF">    .</span><span style="color: #8FBCBB">toSeq</span></span>
<span class="line"><span style="color: #D8DEE9FF">  </span></span>
<span class="line"><span style="color: #D8DEE9FF">  </span><span style="color: #8FBCBB">val</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">columns</span><span style="color: #D8DEE9FF"> = </span><span style="color: #8FBCBB">caseClassFields</span></span>
<span class="line"><span style="color: #D8DEE9FF">    .</span><span style="color: #8FBCBB">map</span><span style="color: #D8DEE9FF">(</span><span style="color: #8FBCBB">F</span><span style="color: #D8DEE9FF">.</span><span style="color: #8FBCBB">col</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">_</span><span style="color: #D8DEE9FF">)</span></span>
<span class="line"><span style="color: #D8DEE9FF">    .</span><span style="color: #8FBCBB">reverse</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF">  </span><span style="color: #8FBCBB">input</span></span>
<span class="line"><span style="color: #D8DEE9FF">    .</span><span style="color: #8FBCBB">select</span><span style="color: #D8DEE9FF">(</span><span style="color: #8FBCBB">columns</span><span style="color: #D8DEE9FF">: </span><span style="color: #8FBCBB">_</span><span style="color: #81A1C1">*</span><span style="color: #D8DEE9FF">)</span></span>
<span class="line"><span style="color: #D8DEE9FF">    .</span><span style="color: #8FBCBB">as</span><span style="color: #D8DEE9FF">[</span><span style="color: #8FBCBB">T</span><span style="color: #D8DEE9FF">]</span></span>
<span class="line"><span style="color: #D8DEE9FF">}</span></span></code></pre></div>



<p></p>
<p>The post <a href="https://tantusdata.com/insights/dtasets-and-dataframes/">Datasets and DataFrames</a> appeared first on <a href="https://tantusdata.com">TantusData</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Unleashing Innovation: A Glimpse into Our Exciting Event Journey</title>
		<link>https://tantusdata.com/insights/unleashing-innovation-event-journey/</link>
		
		<dc:creator><![CDATA[Magdalena Majka]]></dc:creator>
		<pubDate>Tue, 04 Jun 2024 09:52:16 +0000</pubDate>
				<category><![CDATA[learning]]></category>
		<category><![CDATA[LLM]]></category>
		<category><![CDATA[SPARK]]></category>
		<guid isPermaLink="false">https://tantusdata.com/?post_type=insights&#038;p=1989</guid>

					<description><![CDATA[<p>Whether you&#8217;ve joined us in the past or are planning to attend our upcoming events, there&#8217;s always something exciting on the horizon. Let&#8217;s take a look at where we&#8217;ve been and where we&#8217;re headed next, so that you can gain valuable insights from attending our speeches, participating in our workshops, or exploring our other content. [&#8230;]</p>
<p>The post <a href="https://tantusdata.com/insights/unleashing-innovation-event-journey/">Unleashing Innovation: A Glimpse into Our Exciting Event Journey</a> appeared first on <a href="https://tantusdata.com">TantusData</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="683" src="https://tantusdata.com/app/uploads/2024/05/intro-1024x683.jpg" alt="" class="wp-image-2001" srcset="https://tantusdata.com/app/uploads/2024/05/intro-1024x683.jpg 1024w, https://tantusdata.com/app/uploads/2024/05/intro-300x200.jpg 300w, https://tantusdata.com/app/uploads/2024/05/intro-768x512.jpg 768w, https://tantusdata.com/app/uploads/2024/05/intro-1536x1024.jpg 1536w, https://tantusdata.com/app/uploads/2024/05/intro.jpg 1920w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>Whether you&#8217;ve joined us in the past or are planning to attend our upcoming events, there&#8217;s always something exciting on the horizon. Let&#8217;s take a look at where we&#8217;ve been and where we&#8217;re headed next, so that you can gain valuable insights from attending our speeches, participating in our workshops, or exploring our other content. This season, our focus is on Large Language Models (LLMs) and Apache Spark, offering you a wealth of knowledge and practical skills to enhance your expertise. There&#8217;s a lot you can gain from engaging with our content and events, so don&#8217;t miss out!</p>



<h2 class="wp-block-heading">Past Events: Highlights and Memories &#8211; Top Learning Places to Keep in Your Calendar for Next Year</h2>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="684" src="https://tantusdata.com/app/uploads/2024/05/2-1024x684.jpg" alt="" class="wp-image-1996" srcset="https://tantusdata.com/app/uploads/2024/05/2-1024x684.jpg 1024w, https://tantusdata.com/app/uploads/2024/05/2-300x200.jpg 300w, https://tantusdata.com/app/uploads/2024/05/2-768x513.jpg 768w, https://tantusdata.com/app/uploads/2024/05/2-1536x1025.jpg 1536w, https://tantusdata.com/app/uploads/2024/05/2-2048x1367.jpg 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p><strong>Big Data Europe, November 2023</strong></p>



<p>We were honored to host two insightful workshops: &#8220;ChatGPT, LLMs, and LangChains&#8221; and &#8220;Apache Spark Performance Tuning&#8221;. The event was a phenomenal success, and it was great meeting everyone there. If you missed it or want to relive the experience, check out our exclusive videos <a href="https://bigdataconference.eu/?gad_source=1&amp;gclid=Cj0KCQjwgJyyBhCGARIsAK8LVLMHCCVIL8-3q_soH7PLrH2oDLc71BOytkbqzhXRwlwD1X1ljl8uJZgaAoh8EALw_wcB">here</a>.</p>



<figure class="wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-2 is-layout-flex wp-block-gallery-is-layout-flex">
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="683" data-id="1999" src="https://tantusdata.com/app/uploads/2024/05/1-1024x683.jpg" alt="" class="wp-image-1999" srcset="https://tantusdata.com/app/uploads/2024/05/1-1024x683.jpg 1024w, https://tantusdata.com/app/uploads/2024/05/1-300x200.jpg 300w, https://tantusdata.com/app/uploads/2024/05/1-768x512.jpg 768w, https://tantusdata.com/app/uploads/2024/05/1-1536x1024.jpg 1536w, https://tantusdata.com/app/uploads/2024/05/1-2048x1365.jpg 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</figure>



<p><strong>SMG Data Summit, January 23-24, 2024</strong></p>



<p>This two-day event, hosted by Google and organized by SMG Swiss Marketplace Group, was a deep dive into the world of data analytics and innovation. We led two workshops: &#8220;ChatGPT, LLMs, and LangChains&#8221; and &#8220;Deep Dive into AI &amp; ML for CxOs, Managers, and Business Leaders&#8221;. It was a fantastic opportunity to enhance our data expertise. More details can be found <a href="https://swissmarketplace.group/data-summit/">here</a>.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="684" src="https://tantusdata.com/app/uploads/2024/05/6-1024x684.jpg" alt="" class="wp-image-2003" srcset="https://tantusdata.com/app/uploads/2024/05/6-1024x684.jpg 1024w, https://tantusdata.com/app/uploads/2024/05/6-300x200.jpg 300w, https://tantusdata.com/app/uploads/2024/05/6-768x513.jpg 768w, https://tantusdata.com/app/uploads/2024/05/6-1536x1025.jpg 1536w, https://tantusdata.com/app/uploads/2024/05/6-2048x1367.jpg 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p><strong>Warsaw IT Days, April 5-6, 2024</strong></p>



<p>Celebrating its 15th anniversary, this iconic event gathered over 10,000 IT and Data Science enthusiasts. Our speeches, &#8220;AI Chats &#8211; What Nobody Told You: The Conundrums of Business Integration&#8221; and &#8220;Optimising Apache Spark and SQL for Improved Performance,&#8221; were well-received. Discover more about this event <a href="https://warszawskiedniinformatyki.pl/en/">here</a>.</p>



<p>If you missed any of these events, there&#8217;s still time to sign up for our upcoming ones or look out for next editions. We also invite you to explore the wealth of content already available on our blog and YouTube channel. Dive into our extensive library of articles, videos, and tutorials to stay updated and inspired.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="683" src="https://tantusdata.com/app/uploads/2024/05/kreatyw-media_004-1-1024x683.jpg" alt="" class="wp-image-2005" srcset="https://tantusdata.com/app/uploads/2024/05/kreatyw-media_004-1-1024x683.jpg 1024w, https://tantusdata.com/app/uploads/2024/05/kreatyw-media_004-1-300x200.jpg 300w, https://tantusdata.com/app/uploads/2024/05/kreatyw-media_004-1-768x512.jpg 768w, https://tantusdata.com/app/uploads/2024/05/kreatyw-media_004-1-1536x1024.jpg 1536w, https://tantusdata.com/app/uploads/2024/05/kreatyw-media_004-1-2048x1365.jpg 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p><strong>Conf42 LLM, April 11, 2024</strong></p>



<p>Marcin Szymaniuk will be diving into the complexities of integrating AI like ChatGPT into business frameworks at Conf42 LLMs. Learn how to optimize your resources for successful AI adoption. Don&#8217;t miss out – details <a href="https://lnkd.in/dF2f3m-t">here</a>.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="683" src="https://tantusdata.com/app/uploads/2024/05/screen-1024x683.jpg" alt="" class="wp-image-2007" srcset="https://tantusdata.com/app/uploads/2024/05/screen-1024x683.jpg 1024w, https://tantusdata.com/app/uploads/2024/05/screen-300x200.jpg 300w, https://tantusdata.com/app/uploads/2024/05/screen-768x512.jpg 768w, https://tantusdata.com/app/uploads/2024/05/screen-1536x1024.jpg 1536w, https://tantusdata.com/app/uploads/2024/05/screen-2048x1365.jpg 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p><strong>Big Data Technology Warsaw Summit, April 24-25, 2024</strong></p>



<p>Join us for technical presentations, interactive roundtables, and networking opportunities with over 600 attendees. We&#8217;ll be leading a roundtable on &#8220;What Product Owners and Managers Should Know About ML and LLMs: The Challenges of Business Integration&#8221;. Find out more <a href="https://bigdatatechwarsaw.eu/">here</a>.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="683" src="https://tantusdata.com/app/uploads/2024/05/4-1024x683.jpg" alt="" class="wp-image-2015" srcset="https://tantusdata.com/app/uploads/2024/05/4-1024x683.jpg 1024w, https://tantusdata.com/app/uploads/2024/05/4-300x200.jpg 300w, https://tantusdata.com/app/uploads/2024/05/4-768x513.jpg 768w, https://tantusdata.com/app/uploads/2024/05/4-1536x1025.jpg 1536w, https://tantusdata.com/app/uploads/2024/05/4-2048x1367.jpg 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p><strong>Data Analytics Meeting, May 17-18, 2024</strong></p>



<p>Our keynote, &#8220;A Short History of Data &#8211; Where Are We Aiming with AI?&#8221; will explore the evolution and future of data. This conference supports student development through discussions and networking. More information is available <a href="https://event.mostwiedzy.pl/event/55/page/398-o-konferencji">here</a>.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="683" src="https://tantusdata.com/app/uploads/2024/05/wirkshop1-1-1024x683.jpg" alt="" class="wp-image-2011" srcset="https://tantusdata.com/app/uploads/2024/05/wirkshop1-1-1024x683.jpg 1024w, https://tantusdata.com/app/uploads/2024/05/wirkshop1-1-300x200.jpg 300w, https://tantusdata.com/app/uploads/2024/05/wirkshop1-1-768x512.jpg 768w, https://tantusdata.com/app/uploads/2024/05/wirkshop1-1-1536x1024.jpg 1536w, https://tantusdata.com/app/uploads/2024/05/wirkshop1-1.jpg 1920w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p><strong>Infoshare, May 22-23, 2024</strong></p>



<p>The biggest tech and startup event in CEE, bringing together thousands of enthusiasts. We&#8217;ll be discussing &#8220;Optimising Apache Spark and SQL&#8221;. Don&#8217;t miss out – sign up <a href="https://infoshare.pl/conference/speakers/#speaker2010">here</a>.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="683" src="https://tantusdata.com/app/uploads/2024/05/wirkshop2-1024x683.jpg" alt="" class="wp-image-2013" srcset="https://tantusdata.com/app/uploads/2024/05/wirkshop2-1024x683.jpg 1024w, https://tantusdata.com/app/uploads/2024/05/wirkshop2-300x200.jpg 300w, https://tantusdata.com/app/uploads/2024/05/wirkshop2-768x512.jpg 768w, https://tantusdata.com/app/uploads/2024/05/wirkshop2-1536x1024.jpg 1536w, https://tantusdata.com/app/uploads/2024/05/wirkshop2.jpg 1920w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p><strong>Jfokus, May 28, 2024</strong></p>



<p>Join us at the Jfokus Training Camp in Stockholm for a focused one-day workshop on &#8220;LLMs and LangChains&#8221;. This is a great chance for hands-on learning and networking. Secure your spot <a href="https://www.jfokus.se/trainingday">here</a>.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="683" src="https://tantusdata.com/app/uploads/2024/05/wyklad-1024x683.jpg" alt="" class="wp-image-2020" srcset="https://tantusdata.com/app/uploads/2024/05/wyklad-1024x683.jpg 1024w, https://tantusdata.com/app/uploads/2024/05/wyklad-300x200.jpg 300w, https://tantusdata.com/app/uploads/2024/05/wyklad-768x512.jpg 768w, https://tantusdata.com/app/uploads/2024/05/wyklad-1536x1024.jpg 1536w, https://tantusdata.com/app/uploads/2024/05/wyklad.jpg 1920w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p><strong>Conf42 Machine Learning, May 30, 2024</strong></p>



<p>Marcin will share insights on Apache Spark SQL at this prestigious event. Check out the details <a href="https://www.conf42.com/ml2024">here</a>.</p>



<h2 class="wp-block-heading">Upcoming Events: Join Us and Stay Ahead</h2>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="684" src="https://tantusdata.com/app/uploads/2024/05/1-2-1024x684.jpg" alt="" class="wp-image-2022" srcset="https://tantusdata.com/app/uploads/2024/05/1-2-1024x684.jpg 1024w, https://tantusdata.com/app/uploads/2024/05/1-2-300x200.jpg 300w, https://tantusdata.com/app/uploads/2024/05/1-2-768x513.jpg 768w, https://tantusdata.com/app/uploads/2024/05/1-2-1536x1025.jpg 1536w, https://tantusdata.com/app/uploads/2024/05/1-2-2048x1367.jpg 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p><strong>Voxxed Days Luxembourg, June 20-21, 2024</strong></p>



<p>We&#8217;re excited to deliver an LLM workshop at this developer-focused event. Learn more and register <a href="https://luxembourg.voxxeddays.com/en/">here</a>.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="684" src="https://tantusdata.com/app/uploads/2024/05/3-1-1024x684.jpg" alt="" class="wp-image-2024" srcset="https://tantusdata.com/app/uploads/2024/05/3-1-1024x684.jpg 1024w, https://tantusdata.com/app/uploads/2024/05/3-1-300x200.jpg 300w, https://tantusdata.com/app/uploads/2024/05/3-1-768x513.jpg 768w, https://tantusdata.com/app/uploads/2024/05/3-1-1536x1025.jpg 1536w, https://tantusdata.com/app/uploads/2024/05/3-1-2048x1367.jpg 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p><strong>PyCon Estonia, September 5-6, 2024</strong></p>



<p>Join us for a workshop on LLMs at one of the largest Python gatherings in the Nordics. More details can be found <a href="https://pycon.ee/">here</a>.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="683" src="https://tantusdata.com/app/uploads/2024/05/SA11796-1-1024x683.jpg" alt="" class="wp-image-2029" srcset="https://tantusdata.com/app/uploads/2024/05/SA11796-1-1024x683.jpg 1024w, https://tantusdata.com/app/uploads/2024/05/SA11796-1-300x200.jpg 300w, https://tantusdata.com/app/uploads/2024/05/SA11796-1-768x512.jpg 768w, https://tantusdata.com/app/uploads/2024/05/SA11796-1-1536x1024.jpg 1536w, https://tantusdata.com/app/uploads/2024/05/SA11796-1-2048x1365.jpg 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p><strong>SREDAY, September 19-20, 2024</strong></p>



<p>We will be offering an LLM workshop at this in-person conference in London. Stay tuned for more updates <a href="https://sreday.com/">here</a>.</p>



<h2 class="wp-block-heading">Looking Ahead</h2>



<p>We have more exciting events coming soon and will be adding them to this article as they are confirmed. Stay tuned for updates and new opportunities to connect, learn, and innovate with us.</p>



<figure class="wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-3 is-layout-flex wp-block-gallery-is-layout-flex">
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="684" data-id="2033" src="https://tantusdata.com/app/uploads/2024/05/5-1024x684.jpg" alt="" class="wp-image-2033" srcset="https://tantusdata.com/app/uploads/2024/05/5-1024x684.jpg 1024w, https://tantusdata.com/app/uploads/2024/05/5-300x200.jpg 300w, https://tantusdata.com/app/uploads/2024/05/5-768x513.jpg 768w, https://tantusdata.com/app/uploads/2024/05/5-1536x1025.jpg 1536w, https://tantusdata.com/app/uploads/2024/05/5-2048x1367.jpg 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="684" data-id="2031" src="https://tantusdata.com/app/uploads/2024/05/9-1024x684.jpg" alt="" class="wp-image-2031" srcset="https://tantusdata.com/app/uploads/2024/05/9-1024x684.jpg 1024w, https://tantusdata.com/app/uploads/2024/05/9-300x200.jpg 300w, https://tantusdata.com/app/uploads/2024/05/9-768x513.jpg 768w, https://tantusdata.com/app/uploads/2024/05/9-1536x1025.jpg 1536w, https://tantusdata.com/app/uploads/2024/05/9-2048x1367.jpg 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="684" data-id="2035" src="https://tantusdata.com/app/uploads/2024/05/8-1024x684.jpg" alt="" class="wp-image-2035" srcset="https://tantusdata.com/app/uploads/2024/05/8-1024x684.jpg 1024w, https://tantusdata.com/app/uploads/2024/05/8-300x200.jpg 300w, https://tantusdata.com/app/uploads/2024/05/8-768x513.jpg 768w, https://tantusdata.com/app/uploads/2024/05/8-1536x1025.jpg 1536w, https://tantusdata.com/app/uploads/2024/05/8-2048x1367.jpg 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="684" data-id="2037" src="https://tantusdata.com/app/uploads/2024/05/7-1024x684.jpg" alt="" class="wp-image-2037" srcset="https://tantusdata.com/app/uploads/2024/05/7-1024x684.jpg 1024w, https://tantusdata.com/app/uploads/2024/05/7-300x200.jpg 300w, https://tantusdata.com/app/uploads/2024/05/7-768x513.jpg 768w, https://tantusdata.com/app/uploads/2024/05/7-1536x1025.jpg 1536w, https://tantusdata.com/app/uploads/2024/05/7-2048x1367.jpg 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</figure>



<p><strong>Trending Topics: Apache Spark and LLMs</strong></p>



<p>Two key topics that garnered significant interest at our events were Apache Spark and LLMs. Due to this high demand, we have dedicated articles on these subjects that are added to the recommendations below.</p>



<p>Stay tuned for more updates and see you at our next event!</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="683" src="https://tantusdata.com/app/uploads/2024/05/20240123_SMG_Data_Summit_Google_Offices_Zurich_0439-1024x683.jpg" alt="" class="wp-image-2039" srcset="https://tantusdata.com/app/uploads/2024/05/20240123_SMG_Data_Summit_Google_Offices_Zurich_0439-1024x683.jpg 1024w, https://tantusdata.com/app/uploads/2024/05/20240123_SMG_Data_Summit_Google_Offices_Zurich_0439-300x200.jpg 300w, https://tantusdata.com/app/uploads/2024/05/20240123_SMG_Data_Summit_Google_Offices_Zurich_0439-768x512.jpg 768w, https://tantusdata.com/app/uploads/2024/05/20240123_SMG_Data_Summit_Google_Offices_Zurich_0439-1536x1024.jpg 1536w, https://tantusdata.com/app/uploads/2024/05/20240123_SMG_Data_Summit_Google_Offices_Zurich_0439.jpg 1920w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
<p>The post <a href="https://tantusdata.com/insights/unleashing-innovation-event-journey/">Unleashing Innovation: A Glimpse into Our Exciting Event Journey</a> appeared first on <a href="https://tantusdata.com">TantusData</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>TantusData Recognised as a Clutch Global Leader for Spring 2024</title>
		<link>https://tantusdata.com/insights/tantusdata-recognised-as-a-clutch-global-leader-for-spring-2024/</link>
		
		<dc:creator><![CDATA[Magdalena Majka]]></dc:creator>
		<pubDate>Mon, 27 May 2024 08:00:50 +0000</pubDate>
				<category><![CDATA[Clutch]]></category>
		<category><![CDATA[reviews]]></category>
		<guid isPermaLink="false">https://tantusdata.com/?post_type=insights&#038;p=2042</guid>

					<description><![CDATA[<p>TantusData named a top B2B company for Qlik, Hadoop, Tableau, Big Data Compliance, Fraud, &#038; Risk Management services.</p>
<p>The post <a href="https://tantusdata.com/insights/tantusdata-recognised-as-a-clutch-global-leader-for-spring-2024/">TantusData Recognised as a Clutch Global Leader for Spring 2024</a> appeared first on <a href="https://tantusdata.com">TantusData</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="1024" src="https://tantusdata.com/app/uploads/2024/05/Global-Award-Graphic-1024x1024.png" alt="" class="wp-image-2043" srcset="https://tantusdata.com/app/uploads/2024/05/Global-Award-Graphic-1024x1024.png 1024w, https://tantusdata.com/app/uploads/2024/05/Global-Award-Graphic-300x300.png 300w, https://tantusdata.com/app/uploads/2024/05/Global-Award-Graphic-150x150.png 150w, https://tantusdata.com/app/uploads/2024/05/Global-Award-Graphic-768x768.png 768w, https://tantusdata.com/app/uploads/2024/05/Global-Award-Graphic-1536x1536.png 1536w, https://tantusdata.com/app/uploads/2024/05/Global-Award-Graphic-2048x2048.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>Clutch hasannounced its recognition of TantusData as a 2024 Spring Global Award winner for Qlik, Hadoop, Tableau, Big Data Compliance, Fraud, &amp; Risk Management services on Clutch, the leading global marketplace of B2B service providers.&nbsp;</p>



<p>Honourees are selected based on their industry expertise and ability to deliver scores that are calculated based on the client feedback from thousands of reviews published on Clutch.&nbsp;TantusData is honoured to be recognised as a 2024 Spring Clutch Global Award winner. This award is a testament to the excellent client work we have delivered this year as recognised through the voice of our customers in their reviews on Clutch. We&#8217;re proud to be recognised as aleader on a global scale. Clutch Global Awards showcases the very best in the B2B services industry worldwide.</p>



<blockquote class="wp-block-quote is-style-default is-layout-flow wp-block-quote-is-layout-flow">
<p>“We are incredibly proud to receive the 2024 Spring Clutch Global Award. This recognition is a direct reflection of our team’s hard work and dedication to delivering outstanding results for our clients. It’s an honour to see our efforts acknowledged on such a prestigious platform, and we are motivated to continue setting high standards in the industry.”</p>
<cite>Marcin Szymaniuk, CEO of TantusData</cite></blockquote>



<p></p>



<p></p>



<p>Since joining Clutch, TantusData has been delighted to receive multiple recognitions from the platform. Previously, we were listed as a leading service provider on Clutch, being named one of Poland&#8217;s industry game-changers in big data analytics. Read more about this recognition <a href="https://tantusdata.com/insights/tantusdata-a-leading-service-providers-clutch/">here</a>.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="576" height="1024" src="https://tantusdata.com/app/uploads/2024/05/Clutch_badges_TantusData-1-576x1024.jpg" alt="" class="wp-image-2091" srcset="https://tantusdata.com/app/uploads/2024/05/Clutch_badges_TantusData-1-576x1024.jpg 576w, https://tantusdata.com/app/uploads/2024/05/Clutch_badges_TantusData-1-169x300.jpg 169w, https://tantusdata.com/app/uploads/2024/05/Clutch_badges_TantusData-1-768x1365.jpg 768w, https://tantusdata.com/app/uploads/2024/05/Clutch_badges_TantusData-1-864x1536.jpg 864w, https://tantusdata.com/app/uploads/2024/05/Clutch_badges_TantusData-1-1152x2048.jpg 1152w, https://tantusdata.com/app/uploads/2024/05/Clutch_badges_TantusData-1-scaled.jpg 1440w" sizes="auto, (max-width: 576px) 100vw, 576px" /></figure>



<blockquote class="wp-block-quote has-text-align-left is-layout-flow wp-block-quote-is-layout-flow">
<p>“It is a joy to witness the incredible success of leading companies worldwide on our platform, and an even greater joy to recognise these companies as Clutch Global honourees. Their dedication to delivering next-level services to clients has not only bolstered their own success but empowered numerous clients to thrive as well. In recognising this spring’s Clutch Global honourees, we aim to showcase industry leaders and encourage connections for Clutch users seeking tailored services to achieve their goals.”&nbsp;</p>
<cite>Sonny Ganguly, Clutch CEO</cite></blockquote>



<p></p>



<p></p>



<p>View our recent work and reviews on <a href="https://clutch.co/profile/tantusdata#highlights">our Clutch profile</a>.</p>



<p>If you’re interested in hiring us for your next project, get in touch with us <a href="https://tantusdata.com/contact-us/">here</a>.</p>
<p>The post <a href="https://tantusdata.com/insights/tantusdata-recognised-as-a-clutch-global-leader-for-spring-2024/">TantusData Recognised as a Clutch Global Leader for Spring 2024</a> appeared first on <a href="https://tantusdata.com">TantusData</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Navigating Big Data Solution Adoption: A Managerial Guide</title>
		<link>https://tantusdata.com/insights/navigating-big-data-solution-adoption-a-managerial-guide/</link>
		
		<dc:creator><![CDATA[Magdalena Majka]]></dc:creator>
		<pubDate>Tue, 21 May 2024 13:45:29 +0000</pubDate>
				<guid isPermaLink="false">https://tantusdata.com/?post_type=insights&#038;p=1942</guid>

					<description><![CDATA[<p>A strategic Overview for Decision Makers Entering the realm of big data solutions marks a transformative step for any organisation, demanding a blend of strategic foresight, meticulous planning, and a deep dive into technological possibilities. This guide is crafted for the astute manager and decision maker poised at the brink of this significant transition, often [&#8230;]</p>
<p>The post <a href="https://tantusdata.com/insights/navigating-big-data-solution-adoption-a-managerial-guide/">Navigating Big Data Solution Adoption: A Managerial Guide</a> appeared first on <a href="https://tantusdata.com">TantusData</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="727" src="https://tantusdata.com/app/uploads/2024/03/shutterstock_518041327-1024x727.jpg" alt="" class="wp-image-1963" srcset="https://tantusdata.com/app/uploads/2024/03/shutterstock_518041327-1024x727.jpg 1024w, https://tantusdata.com/app/uploads/2024/03/shutterstock_518041327-300x213.jpg 300w, https://tantusdata.com/app/uploads/2024/03/shutterstock_518041327-768x545.jpg 768w, https://tantusdata.com/app/uploads/2024/03/shutterstock_518041327-1536x1090.jpg 1536w, https://tantusdata.com/app/uploads/2024/03/shutterstock_518041327-2048x1453.jpg 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<h2 class="wp-block-heading">A strategic Overview for Decision Makers</h2>



<p>Entering the realm of big data solutions marks a transformative step for any organisation, demanding a blend of strategic foresight, meticulous planning, and a deep dive into technological possibilities. This guide is crafted for the astute manager and decision maker poised at the brink of this significant transition, often navigating without extensive prior knowledge of big data technologies. You&#8217;re not just choosing a technological path; you&#8217;re setting the course for how data can redefine your organizational landscape. From preparation to engagement, this guide demystifies the journey, enabling you to chart a course that not only aligns with your organisational goals but propels them to new heights.</p>



<h2 class="wp-block-heading">Laying the Groundwork for Transformation</h2>



<p><strong>Deciphering Your Big Data Ambitions</strong></p>



<p>Understanding and articulating your needs and objectives is the cornerstone of a successful big data strategy. This clarity of purpose guides you through the myriad options and solutions available, ensuring that your choices resonate with the unique contours of your organizational goals. Dive into this analysis by considering two primary dimensions:</p>



<p><strong>Addressing Pains, Problems, and Bottlenecks 🛠️</strong></p>



<p>Your first beacon is the existing landscape of challenges that hinder your operational efficiency or strategic growth. Big data solutions offer a powerful lens to not only view these issues in high resolution but to navigate through them with precision. Whether it&#8217;s through enhancing decision-making capabilities, streamlining operations, or uncovering insights buried within your data, the aim here is to dismantle these barriers, paving the way for a smoother organizational journey.</p>



<ul class="wp-block-list">
<li><strong>Identify Specific Challenges:</strong> Begin with a granular analysis of operational pain points, inefficiencies, or data-related hurdles your organization faces.</li>



<li><strong>Blueprint for Resolution:</strong> Map out how big data technologies could potentially offer solutions, from predictive analytics to advanced data management systems.</li>
</ul>



<p><strong>Optimising Potential Use Cases 💡</strong></p>



<p>Beyond the immediate resolution of problems, big data opens a vista of opportunities to enhance, innovate, and lead. This proactive stance looks at not just where you are, but where you could be. It’s about leveraging data to its fullest potential, identifying areas where analytics, machine learning, and data-driven strategies can introduce efficiencies, innovations, and competitive advantages.</p>



<ul class="wp-block-list">
<li><strong>Innovation and Improvement:</strong> Pinpoint areas within your organization where data analytics could bring about transformative change or offer a competitive edge.</li>



<li><strong>Predictive and Prescriptive Analytics:</strong> Explore how utilizing big data for forecasting and strategic advice could streamline operations, enhance customer experience, or optimize resource allocation.</li>
</ul>



<p>By integrating these two approaches, you create a comprehensive picture of your big data aspirations, capturing both the remedial and the visionary. This dual lens not only addresses where you stand today but positions you to leap forward, turning potential into reality. Remember, the most effective big data solutions often serve a dual purpose: rectifying existing issues while unlocking new opportunities.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="726" src="https://tantusdata.com/app/uploads/2024/04/shutterstock_127197089-1024x726.jpg" alt="" class="wp-image-1968" srcset="https://tantusdata.com/app/uploads/2024/04/shutterstock_127197089-1024x726.jpg 1024w, https://tantusdata.com/app/uploads/2024/04/shutterstock_127197089-300x213.jpg 300w, https://tantusdata.com/app/uploads/2024/04/shutterstock_127197089-768x545.jpg 768w, https://tantusdata.com/app/uploads/2024/04/shutterstock_127197089-1536x1089.jpg 1536w, https://tantusdata.com/app/uploads/2024/04/shutterstock_127197089-2048x1452.jpg 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<h2 class="wp-block-heading">Enhance Your Understanding Through Our Complimentary Webinar</h2>



<p>We recognise the complexity of navigating big data solutions and are committed to empowering decision-makers. Our complimentary webinars delve into the wide-ranging applications of big data and the essential considerations for decision-makers, without promoting our services. These informative sessions are tailored to your organization&#8217;s specific interests and needs, aiming to bolster your big data strategy. <a href="https://tantusdata.com/contact-us/">Contact us</a> to arrange a webinar designed to empower your team with critical insights.</p>



<p><strong>Exclusive Video Resources</strong></p>



<p>In addition to our webinars, we offer concise, impactful video guides on crucial topics:</p>



<ul class="wp-block-list">
<li><strong>Mastering Machine Learning Projects:</strong> Explore the essentials of leading Machine Learning (ML) projects, designed for managers with minimal data backgrounds. This guide simplifies ML project management, covering team roles, goal setting, data quality, and more. <a href="https://www.youtube.com/watch?v=Udk5t0V3BcA">Watch the vid</a><a href="https://www.youtube.com/watch?v=HD1oZieF4pY">eo</a>.</li>



<li><strong>Understanding Data Quality:</strong> Dive into the significance of data quality, a critical factor in the success of any project. This Q&amp;A video addresses common questions, highlighting the risks, benefits, and responsibilities associated with data quality. <a href="https://www.youtube.com/watch?v=wj73Zgqlyic">Explore the video</a>.</li>
</ul>



<h2 class="wp-block-heading">Assessing Your Current Infrastructure</h2>



<p>Understanding your current technological landscape is crucial for identifying the need for big data solutions. This involves a thorough inventory and assessment of your existing data systems, technologies, and infrastructure. Here&#8217;s how to approach this step effectively:</p>



<ul class="wp-block-list">
<li><strong>Conduct an Inventory:</strong> Engage with your IT department or technology team to catalogue all current data systems, software, and technologies in use. If your organization lacks a dedicated IT team, consider consulting with external IT professionals or technology auditors.</li>



<li><strong>Identify Limitations:</strong> Work closely with your IT team to highlight any challenges or limitations in your current setup, including data processing capabilities, storage issues, or scalability concerns. This step is vital for understanding the gaps that big data solutions can fill.</li>



<li><strong>Consult Various Departments:</strong> Different departments may utilize distinct systems or have unique insights into the limitations of the current infrastructure. Ensure to gather input from across the organisation for a holistic view.</li>
</ul>



<h2 class="wp-block-heading">Establishing a Budget Framework</h2>



<p>Setting a realistic budget for big data solutions requires an understanding of both your financial capacity and the market costs of these technologies. Here&#8217;s how to navigate this:</p>



<ul class="wp-block-list">
<li><strong>Assess Financial Capabilities:</strong> Review your organization&#8217;s financial resources, considering both current budgets and potential future investments. Collaboration with your finance department is key to accurately determining your spending capacity.</li>



<li><strong>Research Market Costs:</strong> Given the variability and complexity of big data solution pricing, gathering reliable cost information can be challenging. To navigate this, consider:
<ul class="wp-block-list">
<li><strong>Consulting with Industry Peers:</strong> Reach out to your professional network or industry groups to gain insights into the costs they have encountered.</li>



<li><strong>Leverage Expert Guides: </strong>To receive our comprehensive budget guide detailing price ranges for various big data projects, simply send us an email with the subject &#8216;Budget Guide&#8217;. This indispensable resource is tailored to assist you in setting realistic expectations aligned with current market standards. By requesting this guide, you&#8217;ll gain insight into budgeting for your big data initiatives and will be automatically subscribed to our newsletter, keeping you informed on the latest trends and insights in big data solutions. Please note that subscribing to our newsletter is part of this process, offering you ongoing value beyond the guide.</li>
</ul>
</li>
</ul>



<h2 class="wp-block-heading">Understanding Your Data</h2>



<p>A deep understanding of your organization&#8217;s data is fundamental to selecting the right big data solution. This involves:</p>



<ul class="wp-block-list">
<li><strong>Evaluating Data Characteristics:</strong> Work with your data management team or data scientists to assess the volume, variety, velocity, and veracity of the data your organization handles. If such expertise is not available in-house, consider engaging with data consultants.</li>



<li><strong>Considering Compliance and Privacy:</strong> Ensure you are aware of any industry-specific data privacy or regulatory compliance requirements. This might involve consulting with your legal department or external legal advisors specializing in data protection laws.</li>
</ul>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="949" height="1024" src="https://tantusdata.com/app/uploads/2024/04/shrink-949x1024.jpg" alt="" class="wp-image-1965" srcset="https://tantusdata.com/app/uploads/2024/04/shrink-949x1024.jpg 949w, https://tantusdata.com/app/uploads/2024/04/shrink-278x300.jpg 278w, https://tantusdata.com/app/uploads/2024/04/shrink-768x829.jpg 768w, https://tantusdata.com/app/uploads/2024/04/shrink-1424x1536.jpg 1424w, https://tantusdata.com/app/uploads/2024/04/shrink-1898x2048.jpg 1898w, https://tantusdata.com/app/uploads/2024/04/shrink.jpg 2030w" sizes="auto, (max-width: 949px) 100vw, 949px" /></figure>



<h2 class="wp-block-heading">Engaging Your Stakeholders</h2>



<p>Incorporating stakeholder input is crucial for ensuring alignment and support for big data initiatives. This step should be integrated with identifying your needs and objectives to ensure a cohesive strategy:</p>



<ul class="wp-block-list">
<li><strong>Gather Diverse Insights:</strong> Engage with stakeholders from various departments to compile a comprehensive list of needs, expectations, and concerns. This can include executives, department heads, and end-users who will interact with the big data solutions.</li>



<li><strong>Facilitate Collaborative Discussions:</strong> Organize workshops or meetings that bring together these stakeholders to discuss and refine the objectives and expectations for implementing big data solutions. This collaborative approach ensures that the project aligns with organizational goals and addresses key pain points effectively.</li>
</ul>



<p>By following these detailed steps, you&#8217;ll be well-equipped to prepare for engaging with big data solution providers, ensuring that your organisation&#8217;s needs are accurately identified and that you have a solid foundation for making informed decisions.</p>



<h2 class="wp-block-heading">Initiating Contact with Providers</h2>



<p>Engaging with the right big data solution providers is a critical step towards implementing a system that aligns with your organization&#8217;s needs. Here’s how to navigate this process effectively:</p>



<p><strong>Research and Shortlist Providers</strong></p>



<p>To find providers that not only offer big data solutions but also understand your industry&#8217;s unique challenges, follow these steps:</p>



<ul class="wp-block-list">
<li><strong>Utilize Industry Forums and Reviews:</strong> Platforms like Clutch are invaluable for identifying reputable providers, offering a wealth of user reviews and ratings. This firsthand feedback can give you insights into the providers’ strengths and weaknesses.</li>



<li><strong>Evaluate Expertise and Scalability:</strong> Look for providers that have demonstrated expertise in your industry. Those recognized as experts often contribute to the community by speaking at events, leading workshops, or publishing insightful case studies. This involvement can be a good indicator of their capability to scale solutions to meet your needs.</li>



<li><strong>Explore Provider Portfolios:</strong> Delve into the websites of potential providers to gather detailed information about their services, client success stories, and case studies. This exploration can offer a clearer picture of their capabilities and the types of solutions they&#8217;ve successfully implemented in the past.</li>



<li><strong>Network for Recommendations:</strong> Tap into your professional network for personal insights and recommendations. Firsthand accounts of experiences with big data solution providers can be invaluable in shortlisting candidates.</li>
</ul>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="842" src="https://tantusdata.com/app/uploads/2024/04/shutterstock_98947580-1024x842.jpg" alt="" class="wp-image-1978" srcset="https://tantusdata.com/app/uploads/2024/04/shutterstock_98947580-1024x842.jpg 1024w, https://tantusdata.com/app/uploads/2024/04/shutterstock_98947580-300x247.jpg 300w, https://tantusdata.com/app/uploads/2024/04/shutterstock_98947580-768x632.jpg 768w, https://tantusdata.com/app/uploads/2024/04/shutterstock_98947580-1536x1263.jpg 1536w, https://tantusdata.com/app/uploads/2024/04/shutterstock_98947580-2048x1684.jpg 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p><strong>Reach Out</strong></p>



<p>Once you have a shortlist of potential providers, reaching out effectively is key:</p>



<ul class="wp-block-list">
<li><strong>Prepare a Brief:</strong> Compile a concise overview of your organization, including its needs, objectives, and any specific challenges you hope to address with big data solutions. This brief should summarize the critical information providers need to understand your project.</li>



<li><strong>Initiate Contact:</strong> Use the contact information on providers&#8217; websites to share your brief. This initial outreach is your opportunity to make a strong first impression and lay the groundwork for productive discussions. It’s efficient to send this brief to multiple providers to broaden your options.</li>
</ul>



<p><strong>Schedule Initial Consultations</strong></p>



<p>Engaging in consultations with several providers allows you to compare and contrast their approaches, expertise, and the solutions they offer:</p>



<ul class="wp-block-list">
<li><strong>Consult with Multiple Providers:</strong> Aim to schedule initial consultations with 3-5 providers. This range gives you a broad perspective while remaining manageable. Each provider may offer unique insights, benefits, or approaches that could be crucial for your project.</li>



<li><strong>Communicate Your Availability:</strong> Be clear about when you&#8217;re available for these discussions. Providing a range of dates and times can help expedite scheduling.</li>



<li><strong>Inquire About Scope and Involvement:</strong> During scheduling, ask providers to outline what will be covered during the initial consultation. Also, inquire about the estimated timeline for project completion and the level of involvement required from your team. Understanding these factors upfront can help you prepare for the consultations more effectively.</li>
</ul>



<p>By thoroughly researching potential providers, preparing a clear and concise brief, and strategically scheduling initial consultations, you&#8217;re setting the stage for productive engagements that will lead to identifying the best big data solution for your organization. This process ensures that you have all the information needed to make an informed decision, aligning with your strategic objectives and operational needs.</p>



<h2 class="wp-block-heading">Making Your Selection</h2>



<p>After engaging with potential providers and receiving their proposals, the next step is a critical analysis to determine the best fit for your organization. This phase involves careful consideration of how each proposal aligns with your strategic needs, budgetary constraints, and long-term objectives. Here’s a structured approach to making your selection:</p>



<p><strong>Compare Proposals Against Your Criteria</strong></p>



<ul class="wp-block-list">
<li><strong>Align with Needs and Objectives:</strong> Systematically compare each proposal&#8217;s offerings against the specific needs and objectives you&#8217;ve identified for your big data project. This includes considering how well each solution addresses your current challenges and facilitates your strategic goals.</li>



<li><strong>Budget Compatibility:</strong> Assess each proposal in the context of your budget framework. Consider not only the upfront costs but also any ongoing expenses associated with the solution, such as licensing fees, data storage costs, and additional services.</li>



<li><strong>Strategic Goals Alignment:</strong> Evaluate how each provider&#8217;s solution aligns with your broader strategic goals. This could involve considerations of innovation potential, market competitiveness, and the ability to adapt to future challenges.</li>
</ul>



<p><strong>Evaluate Long-term Benefits and Scalability</strong></p>



<ul class="wp-block-list">
<li><strong>Scalability:</strong> Ensure the proposed solution can grow and adapt as your organization&#8217;s needs evolve. This includes the ability to handle increasing volumes of data, integrate new data sources, and expand in functionality.</li>



<li><strong>Support and Maintenance:</strong> Consider the level and quality of support and maintenance services offered. Reliable post-implementation support is crucial for resolving any issues that arise and ensuring the longevity of your big data solution.</li>



<li><strong>Long-term Value:</strong> Beyond the immediate solution, assess the long-term benefits each provider offers. This could include ongoing updates, training opportunities for your team, and access to additional resources or community support.</li>
</ul>



<p><strong>Achieve Stakeholder Consensus</strong></p>



<ul class="wp-block-list">
<li><strong>Engage Stakeholders:</strong> Present the analyzed proposals to your key stakeholders, highlighting how each aligns with the organization&#8217;s needs and objectives. This presentation should be detailed and include your recommendations based on the evaluation criteria.</li>



<li><strong>Facilitate Discussion:</strong> Encourage open discussion among stakeholders to hear their perspectives, concerns, and preferences. This collaborative approach ensures that the decision-making process is inclusive and considers the insights and needs of different departments or teams.</li>



<li><strong>Consensus Building:</strong> Work towards building a consensus on the provider that best matches your organization&#8217;s vision, objectives, and budget. This may involve negotiating compromises or revisiting specific criteria to ensure alignment with organizational priorities.</li>
</ul>



<p><strong>Finalise Your Selection</strong></p>



<p>Once a consensus is achieved, proceed with finalizing your selection of the big data solution provider. This involves reaching out to the chosen provider to begin the negotiation of terms, finalizing the contract, and planning the implementation phase. Ensure that all legal and financial considerations are thoroughly reviewed and agreed upon before finalizing the agreement.</p>



<p>By following this structured approach, you ensure that your organization selects a big data solution provider that not only meets your current needs but also positions you for future success. This careful selection process paves the way for a fruitful partnership and a successful big data initiative.</p>



<h2 class="wp-block-heading">The Consultation Process</h2>



<p>Engaging with potential big data solution providers through consultations is a pivotal part of the selection process. Here’s what you should expect and how to navigate these meetings effectively:</p>



<p><strong>What to Expect:</strong></p>



<ul class="wp-block-list">
<li><strong>Initial Meeting:</strong> This first encounter is an opportunity to discuss your organization&#8217;s specific needs and objectives in detail and to receive an initial overview of the provider’s solutions. Approach this meeting as a chance to see how well the provider understands your challenges and whether they have the expertise to address them.</li>



<li><strong>Follow-Up Meetings:</strong> These sessions often delve deeper into the technical aspects of the proposed solutions. Expect to engage in discussions about customizing solutions to fit your needs, presentations from technical specialists, and possibly even demos of the solutions. This phase is crucial for assessing the provider&#8217;s capability to tailor their offerings to your requirements.</li>



<li><strong>Proposal Review:</strong> After these discussions, providers will present a formal proposal. This document should outline the solution in detail, including implementation timelines, costs, and the framework for how the solution will be integrated into your existing infrastructure.</li>
</ul>



<p><strong>Key Questions to Ask:</strong></p>



<p>To ensure you gather all the necessary information to make an informed decision, consider asking the following questions:</p>



<ul class="wp-block-list">
<li><strong>Industry Experience:</strong> &#8220;Can you share examples of your work with similar companies or within our industry?&#8221;</li>



<li><strong>Solution Alignment:</strong> &#8220;How do your solutions specifically address our needs and objectives?&#8221;</li>



<li><strong>Case Studies and References:</strong> &#8220;Could you provide case studies or references from past projects similar to ours?&#8221;</li>



<li><strong>Implementation Timeline:</strong> &#8220;What is the expected timeline for the full implementation of your solution?&#8221;</li>



<li><strong>Pricing Structure:</strong> &#8220;Can you provide a detailed explanation of your pricing structure, including any potential additional costs we should anticipate?&#8221;</li>



<li><strong>Data Security and Compliance:</strong> &#8220;How does your solution ensure data security and compliance with relevant regulations?&#8221;</li>



<li><strong>Support and Maintenance:</strong> &#8220;What kind of post-implementation support and maintenance services do you offer?&#8221;</li>
</ul>



<p><strong>Preparing Your Data for Consultation</strong></p>



<p>To effectively engage with big data solution providers, having a clear understanding of your data landscape is essential. Here’s how to prepare:</p>



<ul class="wp-block-list">
<li><strong>Data Inventory:</strong> Conduct a comprehensive review of the types of data your organization processes. This task is often best managed by your IT department or data management team. If such expertise is not readily available within your organization, consider hiring external data consultants to assist.
<ul class="wp-block-list">
<li><strong>Actionable Steps:</strong> Start by listing all data sources, types, and storage locations. Categorize data based on sensitivity, usage frequency, and format. This inventory will be crucial for providers to understand the scope of your data and how their solutions can be applied.</li>
</ul>
</li>



<li><strong>Identify Data Challenges:</strong> Clearly outline any issues your organization faces regarding data management, analysis, or security. This step is crucial for finding a solution that addresses these challenges effectively.
<ul class="wp-block-list">
<li><strong>Who to Consult:</strong> This information might be spread across various departments, such as IT for technical challenges, legal for compliance issues, and operational teams for workflow-related challenges. Consolidate this information to present a comprehensive view of the data challenges to the provider.</li>
</ul>
</li>



<li><strong>Growth Projections:</strong> Anticipate the future scale of your data needs to ensure the proposed solution can accommodate growth. This includes estimating increases in data volume, variety, and velocity.
<ul class="wp-block-list">
<li><strong>Collaboration is Key:</strong> Engage with strategic planning or business development teams to forecast future data growth based on business projections. This foresight ensures the solution remains viable as your organization grows.</li>
</ul>
</li>
</ul>



<p>By thoroughly preparing for the consultation process and clearly understanding your data landscape, you set the stage for productive discussions with potential providers. This preparation enables you to ask informed questions, accurately assess proposals, and ultimately choose a solution that best fits your organisation’s needs.</p>



<h2 class="wp-block-heading">Conclusion</h2>



<p>By following this guide and leveraging the provided resources, you&#8217;ll be well-equipped to engage with big data solution providers effectively. The path to a successful partnership and implementation is paved with preparation, open communication, and a deep understanding of your organizational goals. Our webinars and video resources are here to further enhance your knowledge and confidence in navigating the big data landscape.</p>
<p>The post <a href="https://tantusdata.com/insights/navigating-big-data-solution-adoption-a-managerial-guide/">Navigating Big Data Solution Adoption: A Managerial Guide</a> appeared first on <a href="https://tantusdata.com">TantusData</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Monitoring Airflow jobs with TIG 2: data quality metrics</title>
		<link>https://tantusdata.com/insights/monitoring-airflow-jobs-with-tig-2-data-quality-metrics/</link>
		
		<dc:creator><![CDATA[Amadeusz Kosik]]></dc:creator>
		<pubDate>Tue, 30 Apr 2024 13:31:53 +0000</pubDate>
				<category><![CDATA[data pipelines]]></category>
		<category><![CDATA[data quality]]></category>
		<category><![CDATA[monitoring]]></category>
		<guid isPermaLink="false">https://tantusdata.com/?post_type=insights&#038;p=1914</guid>

					<description><![CDATA[<p>In the first article on Monitoring Airflow jobs with TIG, &#8220;System Metrics&#8221;, we have seen an example of Airflow installation with a TIG stack set up to monitor it. To fully utilize this stack, we should enrich the raw system metrics with statistics on the processed data. Without this, the metrics would tell if the [&#8230;]</p>
<p>The post <a href="https://tantusdata.com/insights/monitoring-airflow-jobs-with-tig-2-data-quality-metrics/">Monitoring Airflow jobs with TIG 2: data quality metrics</a> appeared first on <a href="https://tantusdata.com">TantusData</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="585" src="https://tantusdata.com/app/uploads/2024/02/airflow_jobs-1-1024x585.jpg" alt="" class="wp-image-1919" srcset="https://tantusdata.com/app/uploads/2024/02/airflow_jobs-1-1024x585.jpg 1024w, https://tantusdata.com/app/uploads/2024/02/airflow_jobs-1-300x171.jpg 300w, https://tantusdata.com/app/uploads/2024/02/airflow_jobs-1-768x439.jpg 768w, https://tantusdata.com/app/uploads/2024/02/airflow_jobs-1-1536x878.jpg 1536w, https://tantusdata.com/app/uploads/2024/02/airflow_jobs-1.jpg 1792w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>In the first article on Monitoring Airflow jobs with TIG, &#8220;System Metrics&#8221;, we have seen an example of Airflow installation with a TIG stack set up to monitor it. To fully utilize this stack, we should enrich the raw system metrics with statistics on the processed data. Without this, the metrics would tell <em>if</em> the data pipelines are doing anything but not whether they are working on the <em>correct data</em>.</p>



<h2 class="wp-block-heading">What to look for?</h2>



<p>What can be realistically monitored is a pretty deep topic without a one-fits-all answer. The safe starting point is to look for the size of the data, duplicates (or unique rows), null/missing columns’ values and basic aggregates (count per some enumerated type or min/max values). The nice part of this issue is it is not limited by any software, and you can report any numeric value into an InfluxDB database.</p>



<p>Equally important is not limiting the monitoring to the output of the whole pipeline only. Being able to check the data volume and basic traits on the input and in intermediate steps is crucial, as it enables one to check, identify and react to problems early on (and avoid painful backtracking and recomputing of the whole pipeline).</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="515" src="https://tantusdata.com/app/uploads/2024/02/grafana-dashboard-2-1024x515.png" alt="" class="wp-image-1917" srcset="https://tantusdata.com/app/uploads/2024/02/grafana-dashboard-2-1024x515.png 1024w, https://tantusdata.com/app/uploads/2024/02/grafana-dashboard-2-300x151.png 300w, https://tantusdata.com/app/uploads/2024/02/grafana-dashboard-2-768x386.png 768w, https://tantusdata.com/app/uploads/2024/02/grafana-dashboard-2-1536x772.png 1536w, https://tantusdata.com/app/uploads/2024/02/grafana-dashboard-2.png 1999w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">An example data metrics dashboard showing row count, unique row count, and null rows for three steps in the imaginary data pipeline: load, process, and export. It is available to run a local demo on our GitHub.</figcaption></figure>



<h2 class="wp-block-heading">Computing the metrics</h2>



<p>Technically speaking, such monitoring requires two things in the pipeline: a code (or job) to compute the metric and a wrapper to send it to the metrics database. We did not cover the former here &#8211; it may vary from a simple SQL query run via Hive / Impala to a side output of a Spark job.</p>



<h2 class="wp-block-heading">Storing the data for graphs</h2>



<p>The second part to be done in Airflow is sending the data to the database. At the time of writing this article, the built-in InfluxDB connector allows only querying the database. Please see our demo (especially <em>the plugins</em> directory) for an example implementation of InfluxDB write. You can also use the REST API or <em>BashOperator</em> to call the influx command there.</p>



<h2 class="wp-block-heading">Merging both steps or not?</h2>



<p>Both compute and send metrics steps may be squashed into a single bash step instead of scheduling them separately and stitching them via XComs. However, the more complicated or time-consuming the calculation may be, the better the separated approach would seem. This is a decision for you to make; we provide an example of the former approach.</p>



<h2 class="wp-block-heading">Summary</h2>



<p>After the first step, the example stack has monitoring of the system, and an operator can see whether the system is working and does not have an overload or some kind of bottleneck. This step adds a base monitoring of the data quality. Adding those <em>on multiple points </em>in the data pipeline will also enable verification <em>during the processing</em> &#8211; in a centralized place (or, in this case, WebUI). Once again, a development/demo environment is available on our GitHub.</p>
<p>The post <a href="https://tantusdata.com/insights/monitoring-airflow-jobs-with-tig-2-data-quality-metrics/">Monitoring Airflow jobs with TIG 2: data quality metrics</a> appeared first on <a href="https://tantusdata.com">TantusData</a>.</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
