<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: LaBrina Loving</title>
    <description>The latest articles on DEV Community by LaBrina Loving (@chixcancode).</description>
    <link>https://dev.to/chixcancode</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F60180%2F8c2ba958-ff10-4f28-ac32-bd79eb8b039b.jpeg</url>
      <title>DEV Community: LaBrina Loving</title>
      <link>https://dev.to/chixcancode</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/chixcancode"/>
    <language>en</language>
    <item>
      <title>Set Azure PlayFab Title Data from Google Sheets with No Code</title>
      <dc:creator>LaBrina Loving</dc:creator>
      <pubDate>Tue, 18 Jan 2022 04:20:54 +0000</pubDate>
      <link>https://dev.to/azure/set-azure-playfab-title-data-from-google-sheets-with-no-code-4kn8</link>
      <guid>https://dev.to/azure/set-azure-playfab-title-data-from-google-sheets-with-no-code-4kn8</guid>
      <description>&lt;p&gt;So recently I've seen a lot of people in the Azure PlayFab community ask how they could create a workflow that takes data that is stored online in Github, Google Sheets, or other files and publish to PlayFab.  For example, your game designer might want to tune the experience that is required to reach a level.  The game designer is using Google Sheets to store this information.  You could go straight into the Game Manager to update this, but it might be better to do this in a more automated way with clear separation of roles on the team. One of my favorite ways to automate tasks like these is with Azure Logic Apps.&lt;/p&gt;

&lt;h3&gt;
  
  
  What is Azure Logic Apps
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://docs.microsoft.com/azure/logic-apps/logic-apps-overview"&gt;Azure Logic Apps&lt;/a&gt; provides a serverless engine to build visual automated workflows to integrate apps and move data between applications, usually with little transformation. You build workflows using a visual designer.  This means the following tasks can be done with no code:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt; Sending a weekly news summary or leaderboard updates to all players via Discord, email, or other channels.&lt;/li&gt;
&lt;li&gt; Automatically notifying team when a player is removed from game due to bad behavior or other moderation issues.&lt;/li&gt;
&lt;li&gt; Exporting &lt;a href="https://docs.microsoft.com/gaming/playfab/features/automation/playstream-events/"&gt;PlayStream&lt;/a&gt; and other Telemetry events into Excel or Google Sheets for analysis&lt;/li&gt;
&lt;li&gt; Monitoring tweets or other social media activity of your game, analyze the sentiment, and create alerts or tasks for the team to review.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  How Azure Logic Apps works
&lt;/h3&gt;

&lt;p&gt;At it's core, Azure Logic Apps is just a series of steps, or workflow, to define a process. Each workflow is started by a trigger.  This could be an event, such as when a someone Tweets about your game, or a scheduled time that occurs daily/weekly, or it could even be run on-demand using an HTTP request.  &lt;/p&gt;

&lt;p&gt;Once an event is triggered, the workflow begins to run the tasks that you've created.  You can pick from the over 400+ &lt;a href="https://docs.microsoft.com/azure/connectors/managed"&gt;connectors &lt;/a&gt; as well as using the &lt;a href="https://docs.microsoft.com/azure/connectors/built-in"&gt;built-in actions&lt;/a&gt; to achieve powerful integrations for your game.  One of the built-in connectors is Azure Functions, so you could combine your &lt;a href="https://docs.microsoft.com/gaming/playfab/features/automation/cloudscript-af/"&gt;CloudScripts&lt;/a&gt; with other actions in a visual manner.&lt;/p&gt;

&lt;h3&gt;
  
  
  Prerequisites
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Azure Subscription - if you don't have one you can sign up for a &lt;a href="https://azure.microsoft.com/free/"&gt;free account&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;PlayFab account - you can sign up &lt;a href="https://developer.playfab.com/sign-up"&gt;here&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Let's Do This
&lt;/h3&gt;

&lt;p&gt;Okay, enough talk, let's go ahead and get started with our first workflow. As mentioned earlier, we want to create a workflow that updates PlayFab Title Data from a Google Sheet that the Game Designer manages. &lt;/p&gt;

&lt;p&gt;Because &lt;a href="https://docs.microsoft.com/gaming/playfab/features/data/titledata/"&gt;PlayFab Title Data&lt;/a&gt; is stored as key/value pairs, and our data is stored in Google Sheets, we'll need to convert it to JSON and then send to PlayFab.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--SVZIwcSU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rgxajz9jdnt07d98zule.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--SVZIwcSU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rgxajz9jdnt07d98zule.png" alt="Image description" width="880" height="398"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I log in to the &lt;a href="https://portal.azure.com"&gt;Azure Portal&lt;/a&gt;, search for Logic Apps and create. &lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--NLmdsXfd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hs4avntkd736ds9dbavt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--NLmdsXfd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hs4avntkd736ds9dbavt.png" alt="Azure Logic App Create screen" width="880" height="661"&gt;&lt;/a&gt;&lt;br&gt;
Fill in the required information:&lt;br&gt;
&lt;strong&gt;Resource Group&lt;/strong&gt; - resource group is a logical grouping of Azure Services together so that they can managed together.  Just enter a name that makes sense.&lt;br&gt;
&lt;strong&gt;Type&lt;/strong&gt; - we're going to select Consumption for now as it makes the most sense for now.  For more on pricing options for Azure Logic Apps, check here.&lt;br&gt;
&lt;strong&gt;Name&lt;/strong&gt; - Enter a name that makes sense&lt;br&gt;
&lt;strong&gt;Region&lt;/strong&gt; - Pick the &lt;a href="https://azure.microsoft.com/global-infrastructure/geographies/#geographies"&gt;region&lt;/a&gt; that makes the most sense based on your location.&lt;br&gt;
&lt;strong&gt;Enable Log Analytics&lt;/strong&gt; - Because I'm just doing a demo, I won't turn on &lt;a href="https://docs.microsoft.com/azure/logic-apps/monitor-logic-apps-log-analytics"&gt;Log Analytics,&lt;/a&gt; but definitely when running your Logic App in Test and Production, you should enable Log Analytics.&lt;/p&gt;

&lt;p&gt;Fill in the information and Review and Create to complete creating the Logic App. When you go to the resource, you'll see the visual designer.  You'll be prompted with a bunch of triggers and templates.&lt;br&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Zv6TGFOT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/n6abu4mmu0izlc8hzncq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Zv6TGFOT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/n6abu4mmu0izlc8hzncq.png" alt="Logic App Designer" width="880" height="498"&gt;&lt;/a&gt;&lt;br&gt;
In our example we will just check our Google Sheet nightly for updates to the level design.  To do this we'll select the Recurrence Trigger. When the workflow opens, select the Recurrence trigger and change recurrence to 1 time per day and add the At these Hours and At these Minutes parameters as shown below. &lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ckzfeiUX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/nrw7hjsw3lrlco532mpx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ckzfeiUX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/nrw7hjsw3lrlco532mpx.png" alt="Azure Logic Apps Recurrence Trigger" width="880" height="409"&gt;&lt;/a&gt;&lt;br&gt;
First thing I'll need to do in my workflow is connect to Google Sheets.  Click the plus sign to add a new action, search for Google Sheets and select Get Rows - Google Sheets.  Sign in to your Google account to connect and you then will be able to select your Google Sheet.&lt;/p&gt;

&lt;p&gt;Next we want to take the items in the Google Sheet and select the values into an array.  For this, we will use the built-in &lt;a href="https://docs.microsoft.com/azure/logic-apps/logic-apps-perform-data-operations#select-action"&gt;Select Data Operation&lt;/a&gt;. Add another action and search for Select.  In the From field, I will select Records Value.  For mapping, I will create two fields Level and XP and map them to the values in my Google Sheet as shown below:&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--2cz26o5_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/j4agl363b3cdanwhe7qa.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--2cz26o5_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/j4agl363b3cdanwhe7qa.png" alt="Azure Logic Apps Select Data" width="880" height="357"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now that we have the data, we can create a JSON object that we will pass into our PlayFab Title API like this.  To do this, we will use the &lt;a href="https://docs.microsoft.com/azure/logic-apps/logic-apps-perform-data-operations#compose-action"&gt;Compose action,&lt;/a&gt; which  creates a single JSON output based on several inputs.  We add another action search for Compose.  We build the input by pasting the following in the inputs field: &lt;br&gt;
&lt;code&gt;{&lt;br&gt;
  "Key": "CharacterLevelRamp",&lt;br&gt;
  "Value": ""&lt;br&gt;
}&lt;/code&gt;&lt;br&gt;
Then put your cursor in the Value and select Output from the action above. &lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ZQQmxzSR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/u0bxj9xaqydifux5l5nb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ZQQmxzSR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/u0bxj9xaqydifux5l5nb.png" alt="Azure Logic Apps Compose action" width="880" height="345"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For the last step, we will call the PlayFab Set Title Data API with our data.  To do this, add the &lt;a href="https://docs.microsoft.com/azure/logic-apps/logic-apps-perform-data-operations#compose-action"&gt;HTTP action&lt;/a&gt; and add the following:&lt;br&gt;
Method - Post&lt;br&gt;
URL - https://&lt;strong&gt;[yourTitleID]&lt;/strong&gt;.playfabapi.com/Admin/SetTitleData&lt;br&gt;
Headers - X-SecretKey - &lt;strong&gt;Your Developer Key&lt;/strong&gt;&lt;br&gt;
Body - Select Output from previous step above&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--SGpsXf9h--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8jw5cbhpxhugnz2d6p4n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--SGpsXf9h--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8jw5cbhpxhugnz2d6p4n.png" alt="Logic App Set Title Data PlayFab Action" width="880" height="496"&gt;&lt;/a&gt;&lt;br&gt;
...and that's it!  Now let's test it out. Make sure you save your workflow.  Click Run Trigger to execute your Workflow.  You will see trigger running in Runs History. If all goes well, we will see all green checkboxes. Go into PlayFab --&amp;gt; Title Settings --&amp;gt; Engage --&amp;gt; Content --&amp;gt; Edit Title Data and you should see CharacterLevelRamp set.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--xP0aDdZy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ekl6k2e7i0fadogaw9bb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--xP0aDdZy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ekl6k2e7i0fadogaw9bb.png" alt="PlayFabTitleData" width="880" height="215"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>gamedev</category>
      <category>azure</category>
      <category>playfab</category>
    </item>
    <item>
      <title>Migrating SharePoint Files to Azure Data Lakes Storage</title>
      <dc:creator>LaBrina Loving</dc:creator>
      <pubDate>Fri, 29 Jan 2021 20:15:59 +0000</pubDate>
      <link>https://dev.to/chixcancode/migrating-sharepoint-files-to-azure-data-lakes-storage-471j</link>
      <guid>https://dev.to/chixcancode/migrating-sharepoint-files-to-azure-data-lakes-storage-471j</guid>
      <description>&lt;p&gt;So I recently had a customer that had several terrabytes of data in SharePoint that wanted to move to &lt;a href="https://docs.microsoft.com/en-us/azure/storage/blobs/data-lake-storage-introduction"&gt;Azure Data Lakes Storage&lt;/a&gt; in order to start doing transformations for some Machine Learning experiments.  Typically when migrating data to ADLS I would use something like &lt;a href="https://docs.microsoft.com/en-us/azure/data-factory/copy-activity-overview"&gt;Azure Data Factory Copy Activity&lt;/a&gt;, however SharePoint is not currently supported. However we can copy over these items easily using the &lt;a href="https://docs.microsoft.com/en-us/sharepointmigration/mover-managed-migration-guide"&gt;Mover Migration Tool&lt;/a&gt;.  The Mover Migration tool allows you to migrate docs from users or just SharePoint document libraries to Azure Data Lakes Storage.  For the purposes of this, we are going to migrate a SharePoint Document library to ADLS.  When copy over the documents, it will maintain the folder structure as well.&lt;/p&gt;

&lt;h3&gt;
  
  
  Prerequisites
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;User must be a SharePoint Admin in your tenant.&lt;/li&gt;
&lt;li&gt;User must have &lt;a href="https://docs.microsoft.com/en-us/azure/active-directory/roles/permissions-reference#global-administrator--company-administrator"&gt;Global Administrator&lt;/a&gt;, &lt;a href="https://docs.microsoft.com/en-us/azure/active-directory/roles/permissions-reference#application-administrator"&gt;Application Administrator&lt;/a&gt;, or a &lt;a href="https://docs.microsoft.com/en-us/azure/active-directory/roles/permissions-reference#cloud-application-administrator"&gt;Cloud Application&lt;/a&gt; role on your Azure AD Tenant.  This will be needed to Grant consent to the Mover.io enterprise application&lt;/li&gt;
&lt;li&gt;You have already provisioned your Azure Data Lakes Storage and created a container and folder(or folders) to migrate data from SharePoint.&lt;/li&gt;
&lt;li&gt; The Mover Migration Tool uses a CSV mapping file to map SharePoint Sites to ADLS. Create a CSV file with the headers Source Path and Destination Path. Then add lines for each source SharePoint site and Destination ADLS folder like so:
&lt;a href="https://labrandoncloud.sharepoint.com/sites/TeamSite/Shared%20Documents"&gt;https://labrandoncloud.sharepoint.com/sites/TeamSite/Shared%20Documents&lt;/a&gt;, sharepointtarget/sharepointdata.
In this example &lt;a href="https://labrandoncloud.sharepoint.com/sites/TeamSite/Shared%20Documents"&gt;https://labrandoncloud.sharepoint.com/sites/TeamSite/Shared%20Documents&lt;/a&gt; is my SharePoint Source document library and sharepointtarget/sharepointdata is my container/folder name in the destination ADLS.  For more information on creating CSV files, see &lt;a href="https://docs.microsoft.com/en-us/sharepointmigration/mover-create-migration-csv"&gt;here&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Steps
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Go to &lt;a href="https://mover.io/"&gt;https://mover.io/&lt;/a&gt; and login with an account that is the SharePoint Admin and also AAD Admin that can create Enterprise Applications. &lt;/li&gt;
&lt;li&gt; Once you login, a new Enterprise Application is created.  You can verify by going to your AAD tenant and going to Enterprise Applications.  You should see Office 365 Mover listed as an Enterprise Application.&lt;/li&gt;
&lt;li&gt; In Enterprise Applications, click on the Office 365 Mover application, and then select Permissions on the left. Click Grant admin consent for &lt;em&gt;tenant-name&lt;/em&gt;.
&lt;/li&gt;
&lt;li&gt; Go back to Mover, click &lt;strong&gt;Authorize New Connector&lt;/strong&gt; on Source side.  Select &lt;strong&gt;Office 365(OneDrive/SharePoint Admin)&lt;/strong&gt; from list and click Authorize button.
&lt;/li&gt;
&lt;li&gt; Now on destination side, click &lt;strong&gt;Authorize New Connector&lt;/strong&gt; and select Azure Blob Storage.  Enter name of Blob storage and key.&lt;/li&gt;
&lt;li&gt; Once the Source and Destination has been configured, you can move onto Step 3: Start Transferring.  Click Continue Migration.
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--3FqXPsGZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/40gpargwublgzi83zk4q.PNG" alt="Mover Migration Tool Setup"&gt;
&lt;/li&gt;
&lt;li&gt; The Mover Migration tool migrates data using mapping CSV files as discussed in Prerequisite sections.  Click on Add Users button and upload CSV file you created. You should now see mapping uploaded. 
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--YZLAU_Aa--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/rqvza6oqfwtvyxdl0nw4.PNG" alt="Mapping"&gt;
&lt;/li&gt;
&lt;li&gt;If you are migrating a lot of data, I would suggest doing a Scan first.  This will allow you to see how many files/folders will be migrated.&lt;/li&gt;
&lt;li&gt;Once you are ready, you can click &lt;strong&gt;Start Migrating User&lt;/strong&gt; to copy data from SharePoint to ADLS.  Select Right Now, agree to terms, and click &lt;strong&gt;Start Migration&lt;/strong&gt;.  Once complete, it will show a report of files/folders copied.
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--i59NpvIG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/8ev97ts1xmfj5rtmuqai.PNG" alt="ADLS Image"&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Et Voilá c'est fini&lt;/p&gt;

</description>
      <category>sharepoint</category>
      <category>azure</category>
      <category>storage</category>
    </item>
    <item>
      <title>Serverless Big Data Pipelines - Exploring NFL Football Data with Azure Databricks</title>
      <dc:creator>LaBrina Loving</dc:creator>
      <pubDate>Sat, 12 Sep 2020 20:31:38 +0000</pubDate>
      <link>https://dev.to/chixcancode/azure-back-to-school-2020-serverless-big-data-pipelines-data-storage-and-exploration-1m8a</link>
      <guid>https://dev.to/chixcancode/azure-back-to-school-2020-serverless-big-data-pipelines-data-storage-and-exploration-1m8a</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--QEt20vE0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/h8bjz33t8jx26uf0yyja.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--QEt20vE0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/h8bjz33t8jx26uf0yyja.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;This article is part of &lt;a href="https://azurebacktoschool.tech/"&gt;#AzureBacktoSchool&lt;/a&gt;. You'll find other helpful articles and videos in this Azure content collection. New articles are published every day from community members and cloud advocates in the month of September. Thank you &lt;a href="http://twitter.com/DwayneNcloud"&gt;Dwayne Natwick&lt;/a&gt; for organizing this awesome idea!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;So along with going back to school, American Football returned this week and I'm ready for some Football!!! I've always been very fascinated with how teams and sports analyst use historical data to predict player performance and predict who will win the game and other player statistics.  The concepts and approach here is no different than how you might use Big Data in Sales Forecasting, Predictive Repair for machinery, Inventory Demand scenarios.  &lt;/p&gt;

&lt;p&gt;This blog post will show how to start building a big data analytics platform using serverless technologies.  I will show how to move data from a source to &lt;a href="https://docs.microsoft.com/en-us/azure/storage/blobs/data-lake-storage-introduction"&gt;Azure Data Lakes&lt;/a&gt; using &lt;a href="https://docs.microsoft.com/en-us/azure/data-factory/"&gt;Azure Data Factory&lt;/a&gt; and then do some exploration and analysis using &lt;a href="https://docs.microsoft.com/en-us/azure/databricks/"&gt;Azure Databricks&lt;/a&gt;.  This will be the first in many posts I will do on Serverless Big Data Pipelines using football datasets.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Big Data Architectures&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;When you think about a big data analytics platform, there are typically these components:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--xVhbh3je--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://docs.microsoft.com/en-us/azure/architecture/data-guide/big-data/images/big-data-pipeline.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--xVhbh3je--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://docs.microsoft.com/en-us/azure/architecture/data-guide/big-data/images/big-data-pipeline.png" alt="Big data architecture diagram"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Data sources&lt;/strong&gt;. All big data solutions start with one or more data sources. For my solution, I've identified several sources listed &lt;a href="https://github.com/chixcancode-projects/ffl-ml/blob/master/doc/links_to_data_sources.md"&gt;here&lt;/a&gt;.  For the purposes of this blog, I'm going to play around with play by play data found &lt;a href="https://github.com/ryurko/nflscrapR-data/tree/master/play_by_play_data"&gt;here&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Data storage&lt;/strong&gt;. Data for batch processing operations is typically stored in a distributed file store that can hold high volumes of large files in various formats. This kind of store is often called a &lt;em&gt;data lake&lt;/em&gt;. A data lake provides a centralized store for data engineers and data scientists to explore data in it's raw state.  I will be using &lt;a href="https://docs.microsoft.com/en-us/azure/storage/blobs/data-lake-storage-introduction"&gt;Azure Data Lake Storage Gen 2&lt;/a&gt;.  Azure Data Lake Storage provides fast, secure, scalable cloud storage along with hierarchical namespaces and a file access control using a combination of role based access (RBAC) and POSIX-compliant Access Control Lists (ACLs).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Orchestration&lt;/strong&gt;. Most big data solutions consist of repeated data processing operations, encapsulated in workflows, that transform source data, move data between multiple sources and sinks, load the processed data into an analytical data store, or push the results straight to a report or dashboard. In our solution, we will be moving files from various sources exploring, cleansing, experimenting, and aggregating.  For this, we will use &lt;a href="https://docs.microsoft.com/en-us/azure/data-factory/introduction"&gt;Azure Data Factory&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Batch Processing&lt;/strong&gt;. Big data solutions often use long-running batch jobs to filter, aggregate, and otherwise prepare the data for analysis.  We'll use Azure Databricks is an Apache Spark-based analytics platform. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Analytical data store&lt;/strong&gt;. Many big data solutions prepare data for analysis and then serve the processed data in a structured format that can be queried using analytical tools.  I won't yet cover these in this blog post.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Analysis and reporting&lt;/strong&gt;. The goal of most big data solutions is to provide insights into the data through analysis and reporting. In this you might use tools like &lt;a href="https://powerbi.microsoft.com/en-us/"&gt;Power BI&lt;/a&gt; or Azure Synapse.  I also won't yet cover these in this blog post.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Getting Started&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Ok, enough theory, let's actually build something!!!  To get started, let's provision the following services in our Azure Portal:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://docs.microsoft.com/en-us/azure/storage/blobs/create-data-lake-storage-account"&gt;Azure Data Lake Storage Gen 2(ADLS)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://docs.microsoft.com/en-us/azure/data-factory/quickstart-create-data-factory-portal#create-a-data-factory"&gt;Azure Data Factory&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;
&lt;a href="https://docs.microsoft.com/en-us/azure/databricks/scenarios/quickstart-create-databricks-workspace-portal?tabs=azure-portal#create-an-azure-databricks-workspace"&gt;Azure Databricks Workspace&lt;/a&gt; and &lt;a href="https://docs.microsoft.com/en-us/azure/databricks/scenarios/quickstart-create-databricks-workspace-portal?tabs=azure-portal#create-a-spark-cluster-in-databricks"&gt;Cluster&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Once you've got these services setup as shown below.&lt;br&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--yU9fJSVS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/ha9sdagrtas7nfpgdu1u.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--yU9fJSVS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/ha9sdagrtas7nfpgdu1u.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You'll want to go ahead and create a container in your ADLS.&lt;br&gt;
Make sure that our Azure Data Factory can access our ADLS.  You'll do this by giving the Data Factory 'Storage Blob Data Contributor' rights to our ADLS using it's Managed Service Identity. Managed Service Identity is a way to give an identity to your Azure resources in Azure AD and handles cleaning up this identity automatically when the resource is deleted.  A managed identity is automatically created when you create an ADF resource through the Azure Portal.  &lt;/p&gt;

&lt;p&gt;To do this, go to the ADLS and select Access Control(IAM).  Click Add role assignment.  Select Storage Blob Data Contributor and select the name of the Azure Data Factory resource you created:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--iI92VdJl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/nylj0oibz0n57dl1jbth.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--iI92VdJl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/nylj0oibz0n57dl1jbth.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;
  
  
  &lt;strong&gt;Copying data to ADLS&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;Now that the resources are setup in Azure, let's create a pipeline to copy over the files you need into ADLS.  Go into Azure Data Factory, click Author and Monitor. &lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--QvuCTN24--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/9yg86oozzhxwe5af5xce.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--QvuCTN24--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/9yg86oozzhxwe5af5xce.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You'll see an authoring canvas with a lot of quick start buttons to get you started.  Click on the Copy Data to launch the wizard.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Enter name for your copy pipeline and click 'Next'&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--zmKSzzQ4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/pd7aso667pgotlj6qanh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--zmKSzzQ4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/pd7aso667pgotlj6qanh.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Next up, you will setup our data source.  In order to setup a data source, you must create a Dataset and a Linked Service.  A dataset is a named view of data that simply points or references the data you want to use. Linked services are much like connection strings, which define the connection information needed for Data Factory to connect to external resources. So in setting up your data source, the dataset is the "what" and the linked service is the "how".  Azure Data Factory supports over 90 data connectors.&lt;br&gt;&lt;br&gt;
For this blog, I will start with the &lt;strong&gt;2019 play-by-play&lt;/strong&gt; data located &lt;a href="https://raw.githubusercontent.com/ryurko/nflscrapR-data/master/play_by_play_data/regular_season/reg_pbp_2019.csv"&gt;here&lt;/a&gt;.  Because we are using csv files located in Github, I will use the &lt;a href="https://docs.microsoft.com/en-us/azure/data-factory/connector-http"&gt;HTTP connector&lt;/a&gt;. To create your Http Connector Data Source, select File, and Add new Connection to create your HTTP Linked Service. &lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--xbTkxvfX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/4sm6lepl5sxbftwbogly.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--xbTkxvfX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/4sm6lepl5sxbftwbogly.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Give your Linked Service a name, and set the Base URL to '&lt;a href="https://raw.githubusercontent.com/ryurko/nflscrapR-data/master/"&gt;https://raw.githubusercontent.com/ryurko/nflscrapR-data/master/&lt;/a&gt;'. I'm going to set this up with a Base URL because I will likely be copying several files over from this source and it will be easier to manage as my linked service.  Set Authentication type to 'Annonymous' and click Create.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--njdPUcO5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/84ai5jqybzbshs7cd2s9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--njdPUcO5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/84ai5jqybzbshs7cd2s9.png" alt="Alt Text"&gt;&lt;/a&gt; &lt;br&gt;
You should see your Linked Service created, click next to setup dataset.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;To setup our HTTP dataset, enter the relative url as 'play_by_play_data/regular_season/reg_pbp_2019.csv' and click Next.  You should see a preview of the file like this:&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--QcanW3si--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/wr8pnhjrmd7h36b4f69v.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--QcanW3si--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/wr8pnhjrmd7h36b4f69v.png" alt="Alt Text"&gt;&lt;/a&gt;  Click next.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;To setup ADLS as our destination store, you will again need to create a Linked Service and Dataset.  Since you are saving this file to ADLS, select category Azure and click 'Create new connection'. Select Azure Data Lake Storage Gen2 and click Continue.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Give your linked service a name, change authentication to &lt;strong&gt;Managed Identity&lt;/strong&gt;, select the ADLS storage you created.&lt;br&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--jiOz-2SD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/jhgwar7787idauxd0jgl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--jiOz-2SD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/jhgwar7787idauxd0jgl.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Enter the output folder and destination file name.&lt;br&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--0qmKe3D2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/dq6qwwhm3xl77qg2zw3l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--0qmKe3D2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/dq6qwwhm3xl77qg2zw3l.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Click through to summary to show our copy pipeline setup.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Finally deploy and run the pipeline.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--rwrb91jI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/um6bmicymw4vzymv38y9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--rwrb91jI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/um6bmicymw4vzymv38y9.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;To verify that our file has been properly copied over, you can open Storage Explorer, go to our Storage container and confirm file is there. &lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--TbeIkgdN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/edpngmeoizp8mph8zkia.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--TbeIkgdN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/edpngmeoizp8mph8zkia.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;
  
  
  &lt;strong&gt;Data Exploration&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Nwy1Sjjx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/evapedwa6iotg5b7633n.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Nwy1Sjjx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/evapedwa6iotg5b7633n.jpg" alt="Map Exploration"&gt;&lt;/a&gt;&lt;br&gt;
So now that I have some files in my Data Lake, let's start exploring.  Typically you will want to explore the data, start building out data definitions, removing any unnecessary columns, and cleansing.  To start exploration, I will use Azure Databricks.&lt;/p&gt;

&lt;p&gt;There are three ways of accessing Azure Data Lake Storage Gen2:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Mount an Azure Data Lake Storage Gen2 filesystem to DBFS using a service principal and OAuth 2.0.&lt;/li&gt;
&lt;li&gt;Use a service principal directly.&lt;/li&gt;
&lt;li&gt;Use the Azure Data Lake Storage Gen2 storage account access key directly.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;For production systems, I would highly recommend going with option 1., but since we are just starting out, let's pick option 3.&lt;/p&gt;

&lt;p&gt;To get started, launch the Azure Databricks resource you created above. Create a blank notebook.  In the first cell, you will connect to our ADLS context:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;spark&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;conf&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nb"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;span class="s"&gt;"fs.azure.account.key.&amp;lt;storage account name&amp;gt;.dfs.core.windows.net"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="s"&gt;"&amp;lt;storage account key&amp;gt;"&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Now that we've connected to our storage, we'll want to test out our connection by listing all the files in the directory.  We will use the &lt;a href="https://docs.databricks.com/dev-tools/databricks-utils.html#file-system-utilities"&gt;Filesystem utilities&lt;/a&gt; in Databricks for this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;dbutils&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;fs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ls&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"abfss://&amp;lt;container name&amp;gt;@&amp;lt;storage account name&amp;gt;.dfs.core.windows.net"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;When you Run all, you will see the list command shows our .csv files copied over. &lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--StRFwn2I--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/cfrg73m7ii0g2xihu08m.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--StRFwn2I--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/cfrg73m7ii0g2xihu08m.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now that the files are mounted, load them into a dataframe. A dataframe is a just a table similar to SQL table or even an Excel datasheet that you will perform operations like selecting, filtering, grouping, and joining.  The only difference is that it exists in memory only. To do this write the following code in our cell:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;#set the data lake file location:
&lt;/span&gt;&lt;span class="n"&gt;file_location&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"abfss://&amp;lt;container name&amp;gt;@&amp;lt;storage name&amp;gt;.dfs.core.windows.net/*.csv"&lt;/span&gt;

&lt;span class="c1"&gt;#read in the data to dataframe df
&lt;/span&gt;&lt;span class="n"&gt;df&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;spark&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;read&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nb"&gt;format&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"csv"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="n"&gt;option&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"inferSchema"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"true"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="n"&gt;option&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"header"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"true"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="n"&gt;option&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"delimiter"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;","&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="n"&gt;load&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;file_location&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;#display the dataframe
&lt;/span&gt;&lt;span class="n"&gt;display&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Notice I've done a couple of things.  I've set the file location to *.csv.  This will actually read all of our play-by-play csv files instead of just one.  I've also set "inferSchema" to true which and "header" to true.  Run all again, and you should see all of the rows in the file loaded into the dataframe:&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--9JG4N_mc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/2dww5yabm1thbrfwk2iz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--9JG4N_mc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/2dww5yabm1thbrfwk2iz.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now at long last, let's start doing some data exploration with some queries.  To start, let's say that I want to see total passing yards by team and player.  In a new cell, I'll put the following code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="n"&gt;sql&lt;/span&gt;
&lt;span class="n"&gt;SELECT&lt;/span&gt;
  &lt;span class="n"&gt;posteam&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="n"&gt;passer_player_name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nb"&gt;sum&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;yards_gained&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;FROM&lt;/span&gt;
  &lt;span class="n"&gt;playbyplay_view&lt;/span&gt;
&lt;span class="n"&gt;where&lt;/span&gt;
  &lt;span class="n"&gt;play_type&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"pass"&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="n"&gt;yards_gained&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="n"&gt;group&lt;/span&gt; &lt;span class="n"&gt;by&lt;/span&gt;
  &lt;span class="n"&gt;posteam&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="n"&gt;passer_player_name&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;I used the magic %sql command so I can now write queries against my dataframe using normal SQL statements.  When I run this command, I see the following&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--RWj1wbd3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/dypb6olrhav8banuueph.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--RWj1wbd3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/dypb6olrhav8banuueph.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Great!!! I'm now setup to do more exploration of this data and figure out key data that I want to further analyze and aggregate into permanent data store.&lt;/p&gt;

</description>
      <category>azure</category>
      <category>databricks</category>
      <category>serverless</category>
      <category>azurebacktoschool</category>
    </item>
    <item>
      <title>Power to the Enterprise – Building Bots with Power Virtual Agents </title>
      <dc:creator>LaBrina Loving</dc:creator>
      <pubDate>Wed, 08 Jul 2020 19:36:41 +0000</pubDate>
      <link>https://dev.to/azure/power-to-the-enterprise-building-bots-with-power-virtual-agents-5b3j</link>
      <guid>https://dev.to/azure/power-to-the-enterprise-building-bots-with-power-virtual-agents-5b3j</guid>
      <description> 

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Faoab2e0u80ejn357od35.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Faoab2e0u80ejn357od35.png" alt="Speaker Card"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  #PowerfulDevs Conference
&lt;/h4&gt;

&lt;p&gt;&lt;code&gt;RSVP HERE BY JULY 15:&lt;/code&gt; &lt;br&gt;
&lt;a href="https://aka.ms/powerfuldevsconf" rel="noopener noreferrer"&gt;https://aka.ms/powerfuldevsconf&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;The &lt;a href="https://aka.ms/powerfuldevsconf" rel="noopener noreferrer"&gt;Powerful DEVs Conference&lt;/a&gt; is the first virtual conference of its kind. We will showcase how developers can leverage the Power Platform to build applications faster and with far less effort. Connect with industry-recognized ProDev influencers, Microsoft Cloud Advocates, trusted and diverse community leaders, and members of the Power Platform Team. &lt;/p&gt;

&lt;p&gt;&lt;code&gt;BOOKMARK THIS FOR RESOURCES AND DISCUSSION WITH SPEAKERS&lt;/code&gt;&lt;br&gt;&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag__link"&gt;
  &lt;a href="/azure" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__org__pic"&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F512%2F64ce0b82-730d-4ca0-8359-2c21513a0063.jpg" alt="Microsoft Azure"&gt;
      &lt;div class="ltag__link__user__pic"&gt;
        &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F422403%2F5e52a938-ac03-4919-afca-d684c4a3e39a.jpg" alt=""&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="/azure/powerfuldevs-conference-join-us-on-july-15th-online-fe3" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;#powerfuldevs Conference: Join us on July 15th Online!&lt;/h2&gt;
      &lt;h3&gt;JennyMEvents for Microsoft Azure ・ Jul 10 '20&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#powerfuldevs&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#powerplatform&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#prodev&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#programming&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;
 

&lt;p&gt;Revisit this page during the event to engage in live (and post-event) discussions on those topics with both speakers and community. The speakers will be here for a live Q&amp;amp;A for at least 30 minutes immediately after their session concludes. After the event, come back to find additional slides, videos, and resources for this session. &lt;/p&gt;


 

&lt;h2&gt;
  
  
  About This Session:
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;July 15, 2020: 12:00 PDT - 12:25 PDT&lt;/code&gt; &lt;/p&gt;

&lt;p&gt;Power Virtual Agents empowers teams to easily create powerful bots using a guided, no-code graphical interface. It also allows users to add custom skills built with pro-code tools. In this session, I will walk though how both low-code and pro-code developers can work together to build bots. I will discuss the software development lifecycle for bots with Power Virtual Agent and key points to consider. &lt;/p&gt;

&lt;h2&gt;
  
  
  About the Speaker:
&lt;/h2&gt;

&lt;p&gt;LaBrina Loving is a Senior Engineer @ Microsoft focusing on Azure for ISV's and Startups. Follow &lt;a href="https://twitter.com/chixcancode" rel="noopener noreferrer"&gt;@chixcancode&lt;/a&gt; on Twitter. &lt;/p&gt;

&lt;p&gt;Additional Resources: &lt;a href="https://aka.ms/PowerBotFramework?WT.mc.id=events_powerfuldevs-blog-&amp;lt;chixcancode" rel="noopener noreferrer"&gt;aka.ms/powerbotframework&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ama</category>
      <category>powerfuldevs</category>
      <category>azure</category>
      <category>powerplatform</category>
    </item>
  </channel>
</rss>
