| |
| <!doctype html> |
| <html lang="en" class="no-js"> |
| <head> |
| <meta name="robots" content="noindex, follow"> |
| |
| <meta charset="utf-8"> |
| <meta name="viewport" content="width=device-width,initial-scale=1"> |
| |
| <meta name="description" content="Apache Sedona is a cluster computing system for processing large-scale spatial data. Sedona extends existing cluster computing systems, such as Apache Spark, Apache Flink, and Snowflake, with a set of out-of-the-box distributed Spatial Datasets and Spatial SQL that efficiently load, process, and analyze large-scale spatial data across machines."> |
| |
| |
| |
| <link rel="canonical" href="https://sedona.apache.org/latest/tutorial/sql/"> |
| |
| |
| <link rel="prev" href="../../setup/azure-synapse-analytics/"> |
| |
| |
| <link rel="next" href="../raster/"> |
| |
| |
| |
| <link rel="alternate" href="./" hreflang="en"> |
| |
| <link rel="alternate" href="../../zh/tutorial/sql/" hreflang="zh"> |
| |
| |
| |
| <link rel="icon" href="../../favicon.ico"> |
| <meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.7.7"> |
| |
| |
| |
| <title>Spatial DataFrame / SQL app - Apache Sedona</title> |
| |
| |
| |
| <link rel="stylesheet" href="../../assets/stylesheets/main.ec1eaa64.min.css"> |
| |
| |
| <link rel="stylesheet" href="../../assets/stylesheets/palette.ab4e12ef.min.css"> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <link rel="stylesheet" href="../../assets/stylesheets/extra.min.css"> |
| |
| <script>__md_scope=new URL("../..",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script> |
| |
| |
| |
| |
| |
| |
| <meta name="google-site-verification" content="o2riomKLozYKc2IQivWGsrI2unuyQs7hXiAD4kGMCTQ" /> |
| <link rel="apple-touch-icon" sizes="180x180" href="../../favicons/apple-touch-icon.png"> |
| <link rel="icon" type="image/png" sizes="32x32" href="../../favicons/favicon-32x32.png"> |
| <link rel="icon" type="image/png" sizes="16x16" href="../../favicons/favicon-16x16.png"> |
| <link rel="manifest" href="../../favicons/site.webmanifest"> |
| <meta name="msapplication-config" content="../../favicons/browserconfig.xml"> |
| <meta name="msapplication-TileColor" content="#ca463a"> |
| <meta name="theme-color" content="#ca463a"> |
| |
| </head> |
| |
| |
| |
| |
| |
| |
| |
| <body dir="ltr" data-md-color-scheme="default" data-md-color-primary="deep-orange" data-md-color-accent="green"> |
| |
| |
| <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off"> |
| <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off"> |
| <label class="md-overlay" for="__drawer"></label> |
| <div data-md-component="skip"> |
| |
| |
| <a href="#set-up-dependencies" class="md-skip"> |
| Skip to content |
| </a> |
| |
| </div> |
| <div data-md-component="announce"> |
| |
| </div> |
| |
| <div data-md-color-scheme="default" data-md-component="outdated" hidden> |
| |
| <aside class="md-banner md-banner--warning"> |
| <div class="md-banner__inner md-grid md-typeset"> |
| You're not viewing the latest stable version. |
| <a href="../../.."> |
| <strong>Click here to go to the latest stable version.</strong> |
| </a> |
| |
| </div> |
| <script>var el=document.querySelector("[data-md-component=outdated]"),base=new URL("../.."),outdated=__md_get("__outdated",sessionStorage,base);!0===outdated&&el&&(el.hidden=!1)</script> |
| </aside> |
| |
| </div> |
| |
| <div style="background: #CA463A; color: white; text-align: center; padding: 0.5rem;"> |
| <a href="../../setup/release-notes/" title="Announcement">π Apache Sedona 1.9.1 is out now! πΊοΈ Geography SQL functions, Box2D & Box3D types, raster Python UDFs & more. Read the release notes β</a> |
| </div> |
| |
| <!-- |
| Copyright (c) 2016-2025 Martin Donath <martin.donath@squidfunk.com> |
| |
| Permission is hereby granted, free of charge, to any person obtaining a copy |
| of this software and associated documentation files (the "Software"), to |
| deal in the Software without restriction, including without limitation the |
| rights to use, copy, modify, merge, publish, distribute, sublicense, and/or |
| sell copies of the Software, and to permit persons to whom the Software is |
| furnished to do so, subject to the following conditions: |
| |
| The above copyright notice and this permission notice shall be included in |
| all copies or substantial portions of the Software. |
| |
| THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
| IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
| FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE |
| AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
| LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING |
| FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS |
| IN THE SOFTWARE. |
| --> |
| |
| <!-- Determine classes --> |
| |
| |
| |
| |
| |
| <!-- Header --> |
| <header class="md-header md-header--shadow md-header--lifted" data-md-component="header"> |
| <nav |
| class="md-header__inner md-grid container" |
| aria-label="Header" |
| > |
| <div class="left-part"> |
| |
| <!-- Button to open drawer --> |
| <label class="md-header__button md-icon" for="__drawer"> |
| |
| <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3zm0 5h18v2H3zm0 5h18v2H3z"/></svg> |
| </label> |
| |
| <!-- Link to home --> |
| <a |
| href="../.." |
| title="Apache Sedona" |
| class="header-logo" |
| aria-label="Apache Sedona" |
| data-md-component="logo" |
| > |
| |
| <img src="../../image/logo.svg" alt="logo"> |
| |
| </a> |
| |
| <!-- Header title --> |
| <div class="md-header__title" data-md-component="header-title"> |
| <div class="md-header__ellipsis"> |
| <div class="md-header__topic"> |
| <span class="md-ellipsis"> |
| Apache Sedona |
| </span> |
| </div> |
| <div class="md-header__topic" data-md-component="header-topic"> |
| <span class="md-ellipsis"> |
| |
| Spatial DataFrame / SQL app |
| |
| </span> |
| </div> |
| </div> |
| </div> |
| |
| <!-- Color palette toggle --> |
| |
| |
| |
| |
| <!-- User preference: color palette --> |
| |
| </div> |
| <div class="right-part"> |
| |
| <!-- Site language selector --> |
| |
| |
| <details class="sd-lang-switch"> |
| <summary class="sd-lang-switch__trigger" aria-label="Select language" title="Select language"> |
| <span class="sd-lang-switch__glyph" aria-hidden="true"><span class="sd-lang-switch__glyph-cn">ζ</span><span class="sd-lang-switch__glyph-en">A</span></span> |
| </summary> |
| <ul class="sd-lang-switch__menu"><li> |
| <a |
| href="./" |
| hreflang="en" |
| lang="en" |
| target="_self" |
| class="sd-lang-switch__link sd-lang-switch__link--active" |
| aria-current="true" |
| >English</a> |
| </li> |
| <li> |
| <a |
| href="../../zh/tutorial/sql/" |
| hreflang="zh" |
| lang="zh" |
| target="_self" |
| class="sd-lang-switch__link" |
| |
| >δΈζ</a> |
| </li> |
| |
| </ul> |
| </details> |
| |
| |
| |
| <!-- Button to open search modal --> |
| |
| |
| |
| <!-- Check if search is actually enabled - see https://t.ly/DT_0V --> |
| |
| <label class="md-header__button md-icon btn-search" for="__search"> |
| |
| <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg> |
| </label> |
| |
| <!-- Search interface --> |
| <div class="md-search" data-md-component="search" role="dialog"> |
| <label class="md-search__overlay" for="__search"></label> |
| <div class="md-search__inner" role="search"> |
| <form class="md-search__form" name="search"> |
| <input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required> |
| <label class="md-search__icon md-icon" for="__search"> |
| |
| <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg> |
| |
| <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11z"/></svg> |
| </label> |
| <nav class="md-search__options" aria-label="Search"> |
| |
| <a href="javascript:void(0)" class="md-search__icon md-icon" title="Share" aria-label="Share" data-clipboard data-clipboard-text="" data-md-component="search-share" tabindex="-1"> |
| |
| <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7s-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.15c-.05.21-.08.43-.08.66 0 1.61 1.31 2.91 2.92 2.91s2.92-1.3 2.92-2.91A2.92 2.92 0 0 0 18 16.08"/></svg> |
| </a> |
| |
| <button type="reset" class="md-search__icon md-icon" title="Clear" aria-label="Clear" tabindex="-1"> |
| |
| <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"/></svg> |
| </button> |
| </nav> |
| |
| <div class="md-search__suggest" data-md-component="search-suggest"></div> |
| |
| </form> |
| <div class="md-search__output"> |
| <div class="md-search__scrollwrap" tabindex="0" data-md-scrollfix> |
| <div class="md-search-result" data-md-component="search-result"> |
| <div class="md-search-result__meta"> |
| Initializing search |
| </div> |
| <ol class="md-search-result__list" role="presentation"></ol> |
| </div> |
| </div> |
| </div> |
| </div> |
| </div> |
| |
| |
| |
| <!-- Repository information --> |
| |
| <div class="md-header__source"> |
| |
| <a href="https://github.com/apache/sedona" title="apache/sedona" class="md-source" target="_blank" rel="noopener"> |
| <div class="md-source__icon md-icon"> |
| |
| <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M173.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6m-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3m44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9M252.8 8C114.1 8 8 113.3 8 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C436.2 457.8 504 362.9 504 252 504 113.3 391.5 8 252.8 8M105.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1m-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7m32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1m-11.4-14.7c-1.6 1-1.6 3.6 0 5.9s4.3 3.3 5.6 2.3c1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2"/></svg> |
| </div> |
| <div class="md-source__repository">apache/sedona</div> |
| </a> |
| |
| </div> |
| |
| </div> |
| </nav> |
| |
| <!-- Navigation tabs (sticky) --> |
| |
| |
| |
| <nav class="md-tabs" aria-label="Tabs" data-md-component="tabs"> |
| <div class="md-grid"> |
| <ul class="md-tabs__list"> |
| |
| |
| |
| |
| |
| |
| <li class="md-tabs__item"> |
| <a href="../.." class="md-tabs__link"> |
| |
| |
| |
| |
| |
| Home |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-tabs__item"> |
| <a href="https://sedona.apache.org/sedonadb/" class="md-tabs__link"> |
| |
| |
| |
| |
| |
| SedonaDB |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-tabs__item md-tabs__item--active"> |
| <a href="../../sedonaspark/" class="md-tabs__link"> |
| |
| |
| |
| SedonaSpark |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-tabs__item"> |
| <a href="../../sedonaflink/" class="md-tabs__link"> |
| |
| |
| |
| SedonaFlink |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-tabs__item"> |
| <a href="../../sedonasnow/" class="md-tabs__link"> |
| |
| |
| |
| SedonaSnow |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-tabs__item"> |
| <a href="https://sedona.apache.org/spatialbench/" class="md-tabs__link"> |
| |
| |
| |
| |
| |
| SpatialBench |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-tabs__item"> |
| <a href="../../blog/" class="md-tabs__link"> |
| |
| |
| |
| |
| |
| Blog |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-tabs__item"> |
| <a href="../../download/" class="md-tabs__link"> |
| |
| |
| |
| Community |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-tabs__item"> |
| <a href="../../asf/asf/" class="md-tabs__link"> |
| |
| |
| |
| Apache Software Foundation |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| </ul> |
| </div> |
| </nav> |
| |
| |
| </header> |
| |
| |
| <div class="md-container" data-md-component="container"> |
| |
| |
| |
| |
| <main class="md-main" data-md-component="main"> |
| <div class="md-main__inner md-grid"> |
| |
| |
| |
| <div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" > |
| <div class="md-sidebar__scrollwrap"> |
| <div class="md-sidebar__inner"> |
| |
| |
| |
| |
| |
| |
| |
| |
| <nav class="md-nav md-nav--primary md-nav--lifted" aria-label="Navigation" data-md-level="0"> |
| |
| <label class="md-nav__title" for="__drawer"> |
| <a href="../.." title="Apache Sedona" class="logo-link" aria-label="Apache Sedona" data-md-component="logo"> |
| <img src="../../image/header/logo-mobile.svg" alt="" class="logo"> |
| </a> |
| </label> |
| |
| |
| <div class="md-nav__source"> |
| |
| <a href="https://github.com/apache/sedona" title="apache/sedona" class="md-source" target="_blank" rel="noopener"> |
| <div class="md-source__icon md-icon"> |
| |
| <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M173.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6m-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3m44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9M252.8 8C114.1 8 8 113.3 8 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C436.2 457.8 504 362.9 504 252 504 113.3 391.5 8 252.8 8M105.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1m-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7m32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1m-11.4-14.7c-1.6 1-1.6 3.6 0 5.9s4.3 3.3 5.6 2.3c1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2"/></svg> |
| </div> |
| <div class="md-source__repository">apache/sedona</div> |
| </a> |
| |
| </div> |
| |
| |
| <ul class="md-nav__list" data-md-scrollfix> |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../.." class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| Home |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="https://sedona.apache.org/sedonadb/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| SedonaDB |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> |
| |
| |
| |
| <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3" checked> |
| |
| |
| <label class="md-nav__link" for="__nav_3" id="__nav_3_label" tabindex=""> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| SedonaSpark |
| |
| |
| |
| </span> |
| |
| |
| |
| <span class="md-nav__icon md-icon"></span> |
| </label> |
| |
| <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_3_label" aria-expanded="true"> |
| <label class="md-nav__title" for="__nav_3"> |
| <span class="md-nav__icon md-icon"></span> |
| |
| |
| SedonaSpark |
| |
| |
| </label> |
| <ul class="md-nav__list" data-md-scrollfix> |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../sedonaspark/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| Home |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item md-nav__item--nested"> |
| |
| |
| |
| <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_2" > |
| |
| |
| <label class="md-nav__link" for="__nav_3_2" id="__nav_3_2_label" tabindex="0"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| Install |
| |
| |
| |
| </span> |
| |
| |
| |
| <span class="md-nav__icon md-icon"></span> |
| </label> |
| |
| <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_3_2_label" aria-expanded="false"> |
| <label class="md-nav__title" for="__nav_3_2"> |
| <span class="md-nav__icon md-icon"></span> |
| |
| |
| Install |
| |
| |
| </label> |
| <ul class="md-nav__list" data-md-scrollfix> |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../setup/overview/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| Overview |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../setup/modules/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| Modules |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../setup/platform/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| Language wrappers |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../setup/maven-coordinates/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| Maven Central coordinate |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../setup/docker/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| Use Sedona in Docker |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item md-nav__item--nested"> |
| |
| |
| |
| <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_2_6" > |
| |
| |
| <label class="md-nav__link" for="__nav_3_2_6" id="__nav_3_2_6_label" tabindex="0"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| Install Sedona in your local Spark cluster |
| |
| |
| |
| </span> |
| |
| |
| |
| <span class="md-nav__icon md-icon"></span> |
| </label> |
| |
| <nav class="md-nav" data-md-level="3" aria-labelledby="__nav_3_2_6_label" aria-expanded="false"> |
| <label class="md-nav__title" for="__nav_3_2_6"> |
| <span class="md-nav__icon md-icon"></span> |
| |
| |
| Install Sedona in your local Spark cluster |
| |
| |
| </label> |
| <ul class="md-nav__list" data-md-scrollfix> |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../setup/install-scala/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| Install Sedona Scala/Java |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../setup/install-python/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| Install Sedona Python |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../api/rdocs" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| Install Sedona R |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../setup/zeppelin/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| Install Sedona-Zeppelin |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../setup/cluster/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| Set up Spark cluster manually |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| </ul> |
| </nav> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item md-nav__item--nested"> |
| |
| |
| |
| <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_2_7" > |
| |
| |
| <label class="md-nav__link" for="__nav_3_2_7" id="__nav_3_2_7_label" tabindex="0"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| Cloud platforms |
| |
| |
| |
| </span> |
| |
| |
| |
| <span class="md-nav__icon md-icon"></span> |
| </label> |
| |
| <nav class="md-nav" data-md-level="3" aria-labelledby="__nav_3_2_7_label" aria-expanded="false"> |
| <label class="md-nav__title" for="__nav_3_2_7"> |
| <span class="md-nav__icon md-icon"></span> |
| |
| |
| Cloud platforms |
| |
| |
| </label> |
| <ul class="md-nav__list" data-md-scrollfix> |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../setup/wherobots/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| Install on Wherobots |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../setup/databricks/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| Install on Databricks |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../setup/emr/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| Install on AWS EMR |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../setup/glue/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| Install on AWS Glue |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../setup/fabric/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| Install on Microsoft Fabric |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../setup/azure-synapse-analytics/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| Install on Azure Synapse Analytics |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| </ul> |
| </nav> |
| |
| </li> |
| |
| |
| |
| |
| </ul> |
| </nav> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item md-nav__item--active md-nav__item--nested"> |
| |
| |
| |
| <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_3" checked> |
| |
| |
| <label class="md-nav__link" for="__nav_3_3" id="__nav_3_3_label" tabindex="0"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| Programming Guide |
| |
| |
| |
| </span> |
| |
| |
| |
| <span class="md-nav__icon md-icon"></span> |
| </label> |
| |
| <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_3_3_label" aria-expanded="true"> |
| <label class="md-nav__title" for="__nav_3_3"> |
| <span class="md-nav__icon md-icon"></span> |
| |
| |
| Programming Guide |
| |
| |
| </label> |
| <ul class="md-nav__list" data-md-scrollfix> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item md-nav__item--active"> |
| |
| <input class="md-nav__toggle md-toggle" type="checkbox" id="__toc"> |
| |
| |
| |
| <label class="md-nav__link md-nav__link--active" for="__toc"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| Spatial DataFrame / SQL app |
| |
| |
| |
| </span> |
| |
| |
| |
| <span class="md-nav__icon md-icon"></span> |
| </label> |
| |
| <a href="./" class="md-nav__link md-nav__link--active"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| Spatial DataFrame / SQL app |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| |
| |
| |
| <nav class="md-nav md-nav--secondary" aria-label="Table of contents"> |
| |
| |
| |
| |
| <label class="md-nav__title" for="__toc"> |
| <span class="md-nav__icon md-icon"></span> |
| Table of contents |
| </label> |
| <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix> |
| |
| <li class="md-nav__item"> |
| <a href="#set-up-dependencies" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| Set up dependencies |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#create-sedona-config" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| Create Sedona config |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#initiate-sedonacontext" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| Initiate SedonaContext |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#load-data-from-text-files" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| Load data from text files |
| |
| </span> |
| </a> |
| |
| <nav class="md-nav" aria-label="Load data from text files"> |
| <ul class="md-nav__list"> |
| |
| <li class="md-nav__item"> |
| <a href="#load-the-raw-dataframe" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| Load the raw DataFrame |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#create-a-geometry-type-column" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| Create a Geometry type column |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| </ul> |
| </nav> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#load-geojson-data" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| Load GeoJSON Data |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#load-shapefile" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| Load Shapefile |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#load-geoparquet" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| Load GeoParquet |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#load-data-from-stac-catalog" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| Load data from STAC catalog |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#load-data-from-jdbc-data-sources" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| Load data from JDBC data sources |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#load-geopackage" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| Load GeoPackage |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#load-osm-pbf" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| Load OSM PBF |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#transform-the-coordinate-reference-system" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| Transform the Coordinate Reference System |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#cluster-with-dbscan" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| Cluster with DBSCAN |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#calculate-the-local-outlier-factor-lof" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| Calculate the Local Outlier Factor (LOF) |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#perform-getis-ord-gi-hot-spot-analysis" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| Perform Getis-Ord Gi(*) Hot Spot Analysis |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#run-spatial-queries" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| Run spatial queries |
| |
| </span> |
| </a> |
| |
| <nav class="md-nav" aria-label="Run spatial queries"> |
| <ul class="md-nav__list"> |
| |
| <li class="md-nav__item"> |
| <a href="#range-query" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| Range query |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#knn-query" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| KNN query |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#join-query" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| Join query |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#knn-join-query" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| KNN join query |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#other-queries" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| Other queries |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| </ul> |
| </nav> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#visualize-query-results" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| Visualize query results |
| |
| </span> |
| </a> |
| |
| <nav class="md-nav" aria-label="Visualize query results"> |
| <ul class="md-nav__list"> |
| |
| <li class="md-nav__item"> |
| <a href="#sedonapydeck" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| SedonaPyDeck |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#sedonakepler" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| SedonaKepler |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| </ul> |
| </nav> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#create-a-user-defined-function-udf" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| Create a User-Defined Function (UDF) |
| |
| </span> |
| </a> |
| |
| <nav class="md-nav" aria-label="Create a User-Defined Function (UDF)"> |
| <ul class="md-nav__list"> |
| |
| <li class="md-nav__item"> |
| <a href="#geometry-to-primitive" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| Geometry to primitive |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#geometry-to-geometry" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| Geometry to Geometry |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#geometry-primitive-to-geometry" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| Geometry, primitive to geometry |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#geometry-primitive-to-geometry-primitive" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| Geometry, primitive to Geometry, primitive |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| </ul> |
| </nav> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#spatial-vectorized-udfs-python-only" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| Spatial vectorized udfs (Python only) |
| |
| </span> |
| </a> |
| |
| <nav class="md-nav" aria-label="Spatial vectorized udfs (Python only)"> |
| <ul class="md-nav__list"> |
| |
| <li class="md-nav__item"> |
| <a href="#shapely-scalar-udf" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| Shapely scalar UDF |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#geoseries-udf" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| GeoSeries UDF |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| </ul> |
| </nav> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#save-to-permanent-storage" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| Save to permanent storage |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#save-geojson" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| Save GeoJSON |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#save-geoparquet" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| Save GeoParquet |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#save-to-postgis" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| Save to Postgis |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#convert-between-dataframe-and-spatialrdd" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| Convert between DataFrame and SpatialRDD |
| |
| </span> |
| </a> |
| |
| <nav class="md-nav" aria-label="Convert between DataFrame and SpatialRDD"> |
| <ul class="md-nav__list"> |
| |
| <li class="md-nav__item"> |
| <a href="#dataframe-to-spatialrdd" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| DataFrame to SpatialRDD |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#spatialrdd-to-dataframe" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| SpatialRDD to DataFrame |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#spatialrdd-to-dataframe-with-spatial-partitioning" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| SpatialRDD to DataFrame with spatial partitioning |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#spatialpairrdd-to-dataframe" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| SpatialPairRDD to DataFrame |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| </ul> |
| </nav> |
| |
| </li> |
| |
| </ul> |
| |
| </nav> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../raster/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| Raster DataFrame / SQL app |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../sql-pure-sql/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| Pure SQL environment |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../geopandas-api/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| GeoPandas API on Sedona |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../rdd/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| Spatial RDD app |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../api/rdocs" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| Sedona R |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../geopandas-shapely/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| Work with GeoPandas and Shapely |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item md-nav__item--nested"> |
| |
| |
| |
| <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_3_8" > |
| |
| |
| <label class="md-nav__link" for="__nav_3_3_8" id="__nav_3_3_8_label" tabindex="0"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| Files |
| |
| |
| |
| </span> |
| |
| |
| |
| <span class="md-nav__icon md-icon"></span> |
| </label> |
| |
| <nav class="md-nav" data-md-level="3" aria-labelledby="__nav_3_3_8_label" aria-expanded="false"> |
| <label class="md-nav__title" for="__nav_3_3_8"> |
| <span class="md-nav__icon md-icon"></span> |
| |
| |
| Files |
| |
| |
| </label> |
| <ul class="md-nav__list" data-md-scrollfix> |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../files/csv-geometry-sedona-spark/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| CSV |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../files/geopackage-sedona-spark/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| GeoPackage |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../files/geoparquet-sedona-spark/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| GeoParquet |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../files/geojson-sedona-spark/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| GeoJSON |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../files/shapefiles-sedona-spark/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| Shapefiles |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../files/geotiffmetadata-sedona-spark/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| GeoTIFF metadata |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../files/netcdfmetadata-sedona-spark/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| NetCDF metadata |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../files/stac-sedona-spark/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| STAC catalog |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| </ul> |
| </nav> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item md-nav__item--nested"> |
| |
| |
| |
| <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_3_9" > |
| |
| |
| <label class="md-nav__link" for="__nav_3_3_9" id="__nav_3_3_9_label" tabindex="0"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| Concepts |
| |
| |
| |
| </span> |
| |
| |
| |
| <span class="md-nav__icon md-icon"></span> |
| </label> |
| |
| <nav class="md-nav" data-md-level="3" aria-labelledby="__nav_3_3_9_label" aria-expanded="false"> |
| <label class="md-nav__title" for="__nav_3_3_9"> |
| <span class="md-nav__icon md-icon"></span> |
| |
| |
| Concepts |
| |
| |
| </label> |
| <ul class="md-nav__list" data-md-scrollfix> |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../concepts/spatial-joins/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| Spatial Joins |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../concepts/clustering-algorithms/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| Clustering Algorithms |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../concepts/distance-spark/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| Distance |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| </ul> |
| </nav> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item md-nav__item--nested"> |
| |
| |
| |
| <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_3_10" > |
| |
| |
| <label class="md-nav__link" for="__nav_3_3_10" id="__nav_3_3_10_label" tabindex="0"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| Map visualization SQL app |
| |
| |
| |
| </span> |
| |
| |
| |
| <span class="md-nav__icon md-icon"></span> |
| </label> |
| |
| <nav class="md-nav" data-md-level="3" aria-labelledby="__nav_3_3_10_label" aria-expanded="false"> |
| <label class="md-nav__title" for="__nav_3_3_10"> |
| <span class="md-nav__icon md-icon"></span> |
| |
| |
| Map visualization SQL app |
| |
| |
| </label> |
| <ul class="md-nav__list" data-md-scrollfix> |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../viz/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| Scala/Java |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../zeppelin/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| Use Apache Zeppelin |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../viz-gallery/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| Gallery |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| </ul> |
| </nav> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item md-nav__item--nested"> |
| |
| |
| |
| <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_3_11" > |
| |
| |
| <label class="md-nav__link" for="__nav_3_3_11" id="__nav_3_3_11_label" tabindex="0"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| Performance tuning |
| |
| |
| |
| </span> |
| |
| |
| |
| <span class="md-nav__icon md-icon"></span> |
| </label> |
| |
| <nav class="md-nav" data-md-level="3" aria-labelledby="__nav_3_3_11_label" aria-expanded="false"> |
| <label class="md-nav__title" for="__nav_3_3_11"> |
| <span class="md-nav__icon md-icon"></span> |
| |
| |
| Performance tuning |
| |
| |
| </label> |
| <ul class="md-nav__list" data-md-scrollfix> |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../benchmark/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| Benchmark |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../Advanced-Tutorial-Tune-your-Application/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| Tune RDD application |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../storing-blobs-in-parquet/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| Storing large raster geometries in Parquet files |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| </ul> |
| </nav> |
| |
| </li> |
| |
| |
| |
| |
| </ul> |
| </nav> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item md-nav__item--nested"> |
| |
| |
| |
| <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_4" > |
| |
| |
| <label class="md-nav__link" for="__nav_3_4" id="__nav_3_4_label" tabindex="0"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| API |
| |
| |
| |
| </span> |
| |
| |
| |
| <span class="md-nav__icon md-icon"></span> |
| </label> |
| |
| <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_3_4_label" aria-expanded="false"> |
| <label class="md-nav__title" for="__nav_3_4"> |
| <span class="md-nav__icon md-icon"></span> |
| |
| |
| API |
| |
| |
| </label> |
| <ul class="md-nav__list" data-md-scrollfix> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item md-nav__item--nested"> |
| |
| |
| |
| <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_4_1" > |
| |
| |
| <label class="md-nav__link" for="__nav_3_4_1" id="__nav_3_4_1_label" tabindex="0"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| SQL |
| |
| |
| |
| </span> |
| |
| |
| |
| <span class="md-nav__icon md-icon"></span> |
| </label> |
| |
| <nav class="md-nav" data-md-level="3" aria-labelledby="__nav_3_4_1_label" aria-expanded="false"> |
| <label class="md-nav__title" for="__nav_3_4_1"> |
| <span class="md-nav__icon md-icon"></span> |
| |
| |
| SQL |
| |
| |
| </label> |
| <ul class="md-nav__list" data-md-scrollfix> |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../api/sql/Overview/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| Quick start |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item md-nav__item--nested"> |
| |
| |
| |
| <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_4_1_2" > |
| |
| |
| <label class="md-nav__link" for="__nav_3_4_1_2" id="__nav_3_4_1_2_label" tabindex="0"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| Vector data |
| |
| |
| |
| </span> |
| |
| |
| |
| <span class="md-nav__icon md-icon"></span> |
| </label> |
| |
| <nav class="md-nav" data-md-level="4" aria-labelledby="__nav_3_4_1_2_label" aria-expanded="false"> |
| <label class="md-nav__title" for="__nav_3_4_1_2"> |
| <span class="md-nav__icon md-icon"></span> |
| |
| |
| Vector data |
| |
| |
| </label> |
| <ul class="md-nav__list" data-md-scrollfix> |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../api/sql/Geometry-Functions/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| Geometry Functions |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../api/sql/box2d/Box2D-Functions/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| Box2D Functions |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../api/sql/box3d/Box3D-Functions/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| Box3D Functions |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../api/sql/geography/Geography-Functions/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| Geography Functions |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../api/sql/DataFrameAPI/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| DataFrame Style functions |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../api/sql/Optimizer/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| Query optimization |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../api/sql/CRS-Transformation/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| CRS Transformation |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../api/sql/NearestNeighbourSearching/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| Nearest-Neighbour searching |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../api/sql/Spider/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| Spider:Spatial Data Generator |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../api/sql/Reading-legacy-parquet/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| Reading Legacy Parquet Files |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item md-nav__item--nested"> |
| |
| |
| |
| <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_4_1_2_11" > |
| |
| |
| <label class="md-nav__link" for="__nav_3_4_1_2_11" id="__nav_3_4_1_2_11_label" tabindex="0"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| Visualization |
| |
| |
| |
| </span> |
| |
| |
| |
| <span class="md-nav__icon md-icon"></span> |
| </label> |
| |
| <nav class="md-nav" data-md-level="5" aria-labelledby="__nav_3_4_1_2_11_label" aria-expanded="false"> |
| <label class="md-nav__title" for="__nav_3_4_1_2_11"> |
| <span class="md-nav__icon md-icon"></span> |
| |
| |
| Visualization |
| |
| |
| </label> |
| <ul class="md-nav__list" data-md-scrollfix> |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../api/sql/Visualization-SedonaPyDeck/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| SedonaPyDeck |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../api/sql/Visualization-SedonaKepler/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| SedonaKepler |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| </ul> |
| </nav> |
| |
| </li> |
| |
| |
| |
| |
| </ul> |
| </nav> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item md-nav__item--nested"> |
| |
| |
| |
| <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_4_1_3" > |
| |
| |
| <label class="md-nav__link" for="__nav_3_4_1_3" id="__nav_3_4_1_3_label" tabindex="0"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| Raster data |
| |
| |
| |
| </span> |
| |
| |
| |
| <span class="md-nav__icon md-icon"></span> |
| </label> |
| |
| <nav class="md-nav" data-md-level="4" aria-labelledby="__nav_3_4_1_3_label" aria-expanded="false"> |
| <label class="md-nav__title" for="__nav_3_4_1_3"> |
| <span class="md-nav__icon md-icon"></span> |
| |
| |
| Raster data |
| |
| |
| </label> |
| <ul class="md-nav__list" data-md-scrollfix> |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../api/sql/Raster-Functions/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| Raster Functions |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../api/sql/Raster-map-algebra/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| Raster map algebra |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../api/sql/Raster-UDF/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| Raster UDFs |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../api/sql/Raster-affine-transformation/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| Raster affine transformation |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| </ul> |
| </nav> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../api/sql/Parameter/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| Parameter |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| </ul> |
| </nav> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item md-nav__item--nested"> |
| |
| |
| |
| <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_4_2" > |
| |
| |
| <label class="md-nav__link" for="__nav_3_4_2" id="__nav_3_4_2_label" tabindex="0"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| RDD (core) |
| |
| |
| |
| </span> |
| |
| |
| |
| <span class="md-nav__icon md-icon"></span> |
| </label> |
| |
| <nav class="md-nav" data-md-level="3" aria-labelledby="__nav_3_4_2_label" aria-expanded="false"> |
| <label class="md-nav__title" for="__nav_3_4_2"> |
| <span class="md-nav__icon md-icon"></span> |
| |
| |
| RDD (core) |
| |
| |
| </label> |
| <ul class="md-nav__list" data-md-scrollfix> |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../api/java-api/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| Scala/Java doc |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| </ul> |
| </nav> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item md-nav__item--nested"> |
| |
| |
| |
| <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_4_3" > |
| |
| |
| <label class="md-nav__link" for="__nav_3_4_3" id="__nav_3_4_3_label" tabindex="0"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| Stats |
| |
| |
| |
| </span> |
| |
| |
| |
| <span class="md-nav__icon md-icon"></span> |
| </label> |
| |
| <nav class="md-nav" data-md-level="3" aria-labelledby="__nav_3_4_3_label" aria-expanded="false"> |
| <label class="md-nav__title" for="__nav_3_4_3"> |
| <span class="md-nav__icon md-icon"></span> |
| |
| |
| Stats |
| |
| |
| </label> |
| <ul class="md-nav__list" data-md-scrollfix> |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../api/stats/sql/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| DataFrame |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| </ul> |
| </nav> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item md-nav__item--nested"> |
| |
| |
| |
| <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_4_4" > |
| |
| |
| <label class="md-nav__link" for="__nav_3_4_4" id="__nav_3_4_4_label" tabindex="0"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| Viz |
| |
| |
| |
| </span> |
| |
| |
| |
| <span class="md-nav__icon md-icon"></span> |
| </label> |
| |
| <nav class="md-nav" data-md-level="3" aria-labelledby="__nav_3_4_4_label" aria-expanded="false"> |
| <label class="md-nav__title" for="__nav_3_4_4"> |
| <span class="md-nav__icon md-icon"></span> |
| |
| |
| Viz |
| |
| |
| </label> |
| <ul class="md-nav__list" data-md-scrollfix> |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../api/viz/sql/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| DataFrame/SQL |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../api/viz/java-api/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| RDD |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| </ul> |
| </nav> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../api/rdocs" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| Sedona R |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../api/pydocs" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| Sedona Python |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| </ul> |
| </nav> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../setup/release-notes/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| Release notes |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| </ul> |
| </nav> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item md-nav__item--nested"> |
| |
| |
| |
| <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4" > |
| |
| |
| <label class="md-nav__link" for="__nav_4" id="__nav_4_label" tabindex="0"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| SedonaFlink |
| |
| |
| |
| </span> |
| |
| |
| |
| <span class="md-nav__icon md-icon"></span> |
| </label> |
| |
| <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_4_label" aria-expanded="false"> |
| <label class="md-nav__title" for="__nav_4"> |
| <span class="md-nav__icon md-icon"></span> |
| |
| |
| SedonaFlink |
| |
| |
| </label> |
| <ul class="md-nav__list" data-md-scrollfix> |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../sedonaflink/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| Home |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item md-nav__item--nested"> |
| |
| |
| |
| <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4_2" > |
| |
| |
| <label class="md-nav__link" for="__nav_4_2" id="__nav_4_2_label" tabindex="0"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| Install |
| |
| |
| |
| </span> |
| |
| |
| |
| <span class="md-nav__icon md-icon"></span> |
| </label> |
| |
| <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_2_label" aria-expanded="false"> |
| <label class="md-nav__title" for="__nav_4_2"> |
| <span class="md-nav__icon md-icon"></span> |
| |
| |
| Install |
| |
| |
| </label> |
| <ul class="md-nav__list" data-md-scrollfix> |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../setup/flink/install-scala/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| Install Sedona Scala/Java |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../setup/flink/install-python/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| Install Sedona Python |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../setup/flink/modules/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| Modules |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../setup/flink/platform/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| Language wrappers |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| </ul> |
| </nav> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item md-nav__item--nested"> |
| |
| |
| |
| <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4_3" > |
| |
| |
| <label class="md-nav__link" for="__nav_4_3" id="__nav_4_3_label" tabindex="0"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| Programming Guides |
| |
| |
| |
| </span> |
| |
| |
| |
| <span class="md-nav__icon md-icon"></span> |
| </label> |
| |
| <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_3_label" aria-expanded="false"> |
| <label class="md-nav__title" for="__nav_4_3"> |
| <span class="md-nav__icon md-icon"></span> |
| |
| |
| Programming Guides |
| |
| |
| </label> |
| <ul class="md-nav__list" data-md-scrollfix> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item md-nav__item--nested"> |
| |
| |
| |
| <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4_3_1" > |
| |
| |
| <label class="md-nav__link" for="__nav_4_3_1" id="__nav_4_3_1_label" tabindex="0"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| Sedona with Apache Flink |
| |
| |
| |
| </span> |
| |
| |
| |
| <span class="md-nav__icon md-icon"></span> |
| </label> |
| |
| <nav class="md-nav" data-md-level="3" aria-labelledby="__nav_4_3_1_label" aria-expanded="false"> |
| <label class="md-nav__title" for="__nav_4_3_1"> |
| <span class="md-nav__icon md-icon"></span> |
| |
| |
| Sedona with Apache Flink |
| |
| |
| </label> |
| <ul class="md-nav__list" data-md-scrollfix> |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../flink/sql/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| Spatial SQL app (Flink) |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../flink/pyflink-sql/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| Spatial SQL app (PyFlink) |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| </ul> |
| </nav> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item md-nav__item--nested"> |
| |
| |
| |
| <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4_3_2" > |
| |
| |
| <label class="md-nav__link" for="__nav_4_3_2" id="__nav_4_3_2_label" tabindex="0"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| Examples |
| |
| |
| |
| </span> |
| |
| |
| |
| <span class="md-nav__icon md-icon"></span> |
| </label> |
| |
| <nav class="md-nav" data-md-level="3" aria-labelledby="__nav_4_3_2_label" aria-expanded="false"> |
| <label class="md-nav__title" for="__nav_4_3_2"> |
| <span class="md-nav__icon md-icon"></span> |
| |
| |
| Examples |
| |
| |
| </label> |
| <ul class="md-nav__list" data-md-scrollfix> |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../demo/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| Scala/Java |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../jupyter-notebook/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| Python |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| </ul> |
| </nav> |
| |
| </li> |
| |
| |
| |
| |
| </ul> |
| </nav> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item md-nav__item--nested"> |
| |
| |
| |
| <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4_4" > |
| |
| |
| <label class="md-nav__link" for="__nav_4_4" id="__nav_4_4_label" tabindex="0"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| API |
| |
| |
| |
| </span> |
| |
| |
| |
| <span class="md-nav__icon md-icon"></span> |
| </label> |
| |
| <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_4_label" aria-expanded="false"> |
| <label class="md-nav__title" for="__nav_4_4"> |
| <span class="md-nav__icon md-icon"></span> |
| |
| |
| API |
| |
| |
| </label> |
| <ul class="md-nav__list" data-md-scrollfix> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item md-nav__item--nested"> |
| |
| |
| |
| <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4_4_1" > |
| |
| |
| <label class="md-nav__link" for="__nav_4_4_1" id="__nav_4_4_1_label" tabindex="0"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| SQL |
| |
| |
| |
| </span> |
| |
| |
| |
| <span class="md-nav__icon md-icon"></span> |
| </label> |
| |
| <nav class="md-nav" data-md-level="3" aria-labelledby="__nav_4_4_1_label" aria-expanded="false"> |
| <label class="md-nav__title" for="__nav_4_4_1"> |
| <span class="md-nav__icon md-icon"></span> |
| |
| |
| SQL |
| |
| |
| </label> |
| <ul class="md-nav__list" data-md-scrollfix> |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../api/flink/Overview/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| Overview (Flink) |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../api/flink/Geometry-Functions/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| Geometry Functions |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../api/flink/Geography-Functions/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| Geography Functions |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| </ul> |
| </nav> |
| |
| </li> |
| |
| |
| |
| |
| </ul> |
| </nav> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../setup/release-notes/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| Release notes |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| </ul> |
| </nav> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item md-nav__item--nested"> |
| |
| |
| |
| <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_5" > |
| |
| |
| <label class="md-nav__link" for="__nav_5" id="__nav_5_label" tabindex="0"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| SedonaSnow |
| |
| |
| |
| </span> |
| |
| |
| |
| <span class="md-nav__icon md-icon"></span> |
| </label> |
| |
| <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_5_label" aria-expanded="false"> |
| <label class="md-nav__title" for="__nav_5"> |
| <span class="md-nav__icon md-icon"></span> |
| |
| |
| SedonaSnow |
| |
| |
| </label> |
| <ul class="md-nav__list" data-md-scrollfix> |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../sedonasnow/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| Home |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item md-nav__item--nested"> |
| |
| |
| |
| <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_5_2" > |
| |
| |
| <label class="md-nav__link" for="__nav_5_2" id="__nav_5_2_label" tabindex="0"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| Install |
| |
| |
| |
| </span> |
| |
| |
| |
| <span class="md-nav__icon md-icon"></span> |
| </label> |
| |
| <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_5_2_label" aria-expanded="false"> |
| <label class="md-nav__title" for="__nav_5_2"> |
| <span class="md-nav__icon md-icon"></span> |
| |
| |
| Install |
| |
| |
| </label> |
| <ul class="md-nav__list" data-md-scrollfix> |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../setup/snowflake/install/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| Install Sedona SQL |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../snowflake/sql/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| Spatial SQL app (Snowflake) |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../setup/snowflake/modules/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| Modules |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| </ul> |
| </nav> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item md-nav__item--nested"> |
| |
| |
| |
| <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_5_3" > |
| |
| |
| <label class="md-nav__link" for="__nav_5_3" id="__nav_5_3_label" tabindex="0"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| API |
| |
| |
| |
| </span> |
| |
| |
| |
| <span class="md-nav__icon md-icon"></span> |
| </label> |
| |
| <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_5_3_label" aria-expanded="false"> |
| <label class="md-nav__title" for="__nav_5_3"> |
| <span class="md-nav__icon md-icon"></span> |
| |
| |
| API |
| |
| |
| </label> |
| <ul class="md-nav__list" data-md-scrollfix> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item md-nav__item--nested"> |
| |
| |
| |
| <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_5_3_1" > |
| |
| |
| <label class="md-nav__link" for="__nav_5_3_1" id="__nav_5_3_1_label" tabindex="0"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| SQL |
| |
| |
| |
| </span> |
| |
| |
| |
| <span class="md-nav__icon md-icon"></span> |
| </label> |
| |
| <nav class="md-nav" data-md-level="3" aria-labelledby="__nav_5_3_1_label" aria-expanded="false"> |
| <label class="md-nav__title" for="__nav_5_3_1"> |
| <span class="md-nav__icon md-icon"></span> |
| |
| |
| SQL |
| |
| |
| </label> |
| <ul class="md-nav__list" data-md-scrollfix> |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../api/snowflake/vector-data/Overview/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| Overview (Snowflake) |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../api/snowflake/vector-data/Geometry-Functions/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| Geometry Functions |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| </ul> |
| </nav> |
| |
| </li> |
| |
| |
| |
| |
| </ul> |
| </nav> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../setup/release-notes/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| Release notes |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| </ul> |
| </nav> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="https://sedona.apache.org/spatialbench/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| SpatialBench |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../blog/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| Blog |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item md-nav__item--nested"> |
| |
| |
| |
| <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_8" > |
| |
| |
| <label class="md-nav__link" for="__nav_8" id="__nav_8_label" tabindex="0"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| Community |
| |
| |
| |
| </span> |
| |
| |
| |
| <span class="md-nav__icon md-icon"></span> |
| </label> |
| |
| <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_8_label" aria-expanded="false"> |
| <label class="md-nav__title" for="__nav_8"> |
| <span class="md-nav__icon md-icon"></span> |
| |
| |
| Community |
| |
| |
| </label> |
| <ul class="md-nav__list" data-md-scrollfix> |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../download/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| Download |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../setup/release-notes/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| Release notes |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../setup/compile/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| Compile the code |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../community/contact/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| Community |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item md-nav__item--nested"> |
| |
| |
| |
| <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_8_5" > |
| |
| |
| <label class="md-nav__link" for="__nav_8_5" id="__nav_8_5_label" tabindex="0"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| Contributor Guide |
| |
| |
| |
| </span> |
| |
| |
| |
| <span class="md-nav__icon md-icon"></span> |
| </label> |
| |
| <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_8_5_label" aria-expanded="false"> |
| <label class="md-nav__title" for="__nav_8_5"> |
| <span class="md-nav__icon md-icon"></span> |
| |
| |
| Contributor Guide |
| |
| |
| </label> |
| <ul class="md-nav__list" data-md-scrollfix> |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../community/rule/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| Rules |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../community/develop/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| Develop |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../community/geopandas/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| Contribute to Geopandas API on Sedona |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| </ul> |
| </nav> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item md-nav__item--nested"> |
| |
| |
| |
| <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_8_6" > |
| |
| |
| <label class="md-nav__link" for="__nav_8_6" id="__nav_8_6_label" tabindex="0"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| Committer Guide |
| |
| |
| |
| </span> |
| |
| |
| |
| <span class="md-nav__icon md-icon"></span> |
| </label> |
| |
| <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_8_6_label" aria-expanded="false"> |
| <label class="md-nav__title" for="__nav_8_6"> |
| <span class="md-nav__icon md-icon"></span> |
| |
| |
| Committer Guide |
| |
| |
| </label> |
| <ul class="md-nav__list" data-md-scrollfix> |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../community/contributor/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| Project Management Committee |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../community/release-manager/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| Become a release manager |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../community/snapshot/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| Publish a snapshot version |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../community/publish/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| Make a release |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../community/vote/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| Vote a release |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| </ul> |
| </nav> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../community/publication/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| Publications |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| </ul> |
| </nav> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item md-nav__item--nested"> |
| |
| |
| |
| <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_9" > |
| |
| |
| <label class="md-nav__link" for="__nav_9" id="__nav_9_label" tabindex="0"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| Apache Software Foundation |
| |
| |
| |
| </span> |
| |
| |
| |
| <span class="md-nav__icon md-icon"></span> |
| </label> |
| |
| <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_9_label" aria-expanded="false"> |
| <label class="md-nav__title" for="__nav_9"> |
| <span class="md-nav__icon md-icon"></span> |
| |
| |
| Apache Software Foundation |
| |
| |
| </label> |
| <ul class="md-nav__list" data-md-scrollfix> |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../asf/asf/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| Foundation |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="https://www.apache.org/licenses/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| License |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="https://www.apache.org/events/current-event" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| Events |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="https://www.apache.org/foundation/sponsorship.html" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| Sponsorship |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="https://www.apache.org/foundation/thanks.html" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| Thanks |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="https://www.apache.org/security/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| Security |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="https://privacy.apache.org/policies/privacy-policy-public.html" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| Privacy |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../asf/telemetry/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| Telemetry |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| </ul> |
| </nav> |
| |
| </li> |
| |
| |
| |
| |
| <li class="btn-group"> |
| <a href="#" class="btn btn-red"> |
| Get started |
| </a> |
| </li> |
| |
| </ul> |
| </nav> |
| </div> |
| </div> |
| </div> |
| |
| |
| |
| <div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" > |
| <div class="md-sidebar__scrollwrap"> |
| <div class="md-sidebar__inner"> |
| |
| |
| <nav class="md-nav md-nav--secondary" aria-label="Table of contents"> |
| |
| |
| |
| |
| <label class="md-nav__title" for="__toc"> |
| <span class="md-nav__icon md-icon"></span> |
| Table of contents |
| </label> |
| <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix> |
| |
| <li class="md-nav__item"> |
| <a href="#set-up-dependencies" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| Set up dependencies |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#create-sedona-config" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| Create Sedona config |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#initiate-sedonacontext" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| Initiate SedonaContext |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#load-data-from-text-files" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| Load data from text files |
| |
| </span> |
| </a> |
| |
| <nav class="md-nav" aria-label="Load data from text files"> |
| <ul class="md-nav__list"> |
| |
| <li class="md-nav__item"> |
| <a href="#load-the-raw-dataframe" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| Load the raw DataFrame |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#create-a-geometry-type-column" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| Create a Geometry type column |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| </ul> |
| </nav> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#load-geojson-data" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| Load GeoJSON Data |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#load-shapefile" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| Load Shapefile |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#load-geoparquet" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| Load GeoParquet |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#load-data-from-stac-catalog" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| Load data from STAC catalog |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#load-data-from-jdbc-data-sources" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| Load data from JDBC data sources |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#load-geopackage" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| Load GeoPackage |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#load-osm-pbf" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| Load OSM PBF |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#transform-the-coordinate-reference-system" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| Transform the Coordinate Reference System |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#cluster-with-dbscan" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| Cluster with DBSCAN |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#calculate-the-local-outlier-factor-lof" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| Calculate the Local Outlier Factor (LOF) |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#perform-getis-ord-gi-hot-spot-analysis" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| Perform Getis-Ord Gi(*) Hot Spot Analysis |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#run-spatial-queries" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| Run spatial queries |
| |
| </span> |
| </a> |
| |
| <nav class="md-nav" aria-label="Run spatial queries"> |
| <ul class="md-nav__list"> |
| |
| <li class="md-nav__item"> |
| <a href="#range-query" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| Range query |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#knn-query" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| KNN query |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#join-query" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| Join query |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#knn-join-query" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| KNN join query |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#other-queries" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| Other queries |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| </ul> |
| </nav> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#visualize-query-results" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| Visualize query results |
| |
| </span> |
| </a> |
| |
| <nav class="md-nav" aria-label="Visualize query results"> |
| <ul class="md-nav__list"> |
| |
| <li class="md-nav__item"> |
| <a href="#sedonapydeck" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| SedonaPyDeck |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#sedonakepler" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| SedonaKepler |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| </ul> |
| </nav> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#create-a-user-defined-function-udf" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| Create a User-Defined Function (UDF) |
| |
| </span> |
| </a> |
| |
| <nav class="md-nav" aria-label="Create a User-Defined Function (UDF)"> |
| <ul class="md-nav__list"> |
| |
| <li class="md-nav__item"> |
| <a href="#geometry-to-primitive" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| Geometry to primitive |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#geometry-to-geometry" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| Geometry to Geometry |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#geometry-primitive-to-geometry" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| Geometry, primitive to geometry |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#geometry-primitive-to-geometry-primitive" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| Geometry, primitive to Geometry, primitive |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| </ul> |
| </nav> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#spatial-vectorized-udfs-python-only" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| Spatial vectorized udfs (Python only) |
| |
| </span> |
| </a> |
| |
| <nav class="md-nav" aria-label="Spatial vectorized udfs (Python only)"> |
| <ul class="md-nav__list"> |
| |
| <li class="md-nav__item"> |
| <a href="#shapely-scalar-udf" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| Shapely scalar UDF |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#geoseries-udf" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| GeoSeries UDF |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| </ul> |
| </nav> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#save-to-permanent-storage" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| Save to permanent storage |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#save-geojson" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| Save GeoJSON |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#save-geoparquet" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| Save GeoParquet |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#save-to-postgis" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| Save to Postgis |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#convert-between-dataframe-and-spatialrdd" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| Convert between DataFrame and SpatialRDD |
| |
| </span> |
| </a> |
| |
| <nav class="md-nav" aria-label="Convert between DataFrame and SpatialRDD"> |
| <ul class="md-nav__list"> |
| |
| <li class="md-nav__item"> |
| <a href="#dataframe-to-spatialrdd" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| DataFrame to SpatialRDD |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#spatialrdd-to-dataframe" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| SpatialRDD to DataFrame |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#spatialrdd-to-dataframe-with-spatial-partitioning" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| SpatialRDD to DataFrame with spatial partitioning |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#spatialpairrdd-to-dataframe" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| SpatialPairRDD to DataFrame |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| </ul> |
| </nav> |
| |
| </li> |
| |
| </ul> |
| |
| </nav> |
| </div> |
| </div> |
| </div> |
| |
| |
| |
| |
| |
| |
| <div class="md-content" data-md-component="content"> |
| |
| <article class="md-content__inner md-typeset"> |
| |
| |
| |
| |
| |
| <a href="https://github.com/apache/sedona/edit/master/docs/tutorial/sql.md" title="Edit this page" class="md-content__button md-icon" rel="edit"> |
| |
| <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M10 20H6V4h7v5h5v3.1l2-2V8l-6-6H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h4zm10.2-7c.1 0 .3.1.4.2l1.3 1.3c.2.2.2.6 0 .8l-1 1-2.1-2.1 1-1c.1-.1.2-.2.4-.2m0 3.9L14.1 23H12v-2.1l6.1-6.1z"/></svg> |
| </a> |
| |
| |
| |
| |
| <h1>Spatial DataFrame / SQL app</h1> |
| |
| <!-- |
| Licensed to the Apache Software Foundation (ASF) under one |
| or more contributor license agreements. See the NOTICE file |
| distributed with this work for additional information |
| regarding copyright ownership. The ASF licenses this file |
| to you under the Apache License, Version 2.0 (the |
| "License"); you may not use this file except in compliance |
| with the License. You may obtain a copy of the License at |
| |
| http://www.apache.org/licenses/LICENSE-2.0 |
| |
| Unless required by applicable law or agreed to in writing, |
| software distributed under the License is distributed on an |
| "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| KIND, either express or implied. See the License for the |
| specific language governing permissions and limitations |
| under the License. |
| --> |
| |
| <p>The page outlines the steps to manage spatial data using SedonaSQL.</p> |
| <div class="admonition note"> |
| <p class="admonition-title">Note</p> |
| <p>Sedona assumes geographic coordinates to be in longitude/latitude order. If your data is lat/lon order, please use <code>ST_FlipCoordinates</code> to swap X and Y.</p> |
| </div> |
| <p>SedonaSQL supports SQL/MM Part3 Spatial SQL Standard. It includes four kinds of SQL operators as follows. All these operators can be directly called through:</p> |
| <div class="tabbed-set tabbed-alternate" data-tabs="1:3"><input checked="checked" id="__tabbed_1_1" name="__tabbed_1" type="radio" /><input id="__tabbed_1_2" name="__tabbed_1" type="radio" /><input id="__tabbed_1_3" name="__tabbed_1" type="radio" /><div class="tabbed-labels"><label for="__tabbed_1_1">Scala</label><label for="__tabbed_1_2">Java</label><label for="__tabbed_1_3">Python</label></div> |
| <div class="tabbed-content"> |
| <div class="tabbed-block"> |
| <div class="highlight"><pre><span></span><code><span class="kd">var</span><span class="w"> </span><span class="n">myDataFrame</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">sedona</span><span class="p">.</span><span class="n">sql</span><span class="p">(</span><span class="s">"YOUR_SQL"</span><span class="p">)</span> |
| <span class="n">myDataFrame</span><span class="p">.</span><span class="n">createOrReplaceTempView</span><span class="p">(</span><span class="s">"spatialDf"</span><span class="p">)</span> |
| </code></pre></div> |
| </div> |
| <div class="tabbed-block"> |
| <div class="highlight"><pre><span></span><code><span class="n">Dataset</span><span class="o"><</span><span class="n">Row</span><span class="o">></span><span class="w"> </span><span class="n">myDataFrame</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">sedona</span><span class="p">.</span><span class="na">sql</span><span class="p">(</span><span class="s">"YOUR_SQL"</span><span class="p">)</span> |
| <span class="n">myDataFrame</span><span class="p">.</span><span class="na">createOrReplaceTempView</span><span class="p">(</span><span class="s">"spatialDf"</span><span class="p">)</span> |
| </code></pre></div> |
| </div> |
| <div class="tabbed-block"> |
| <div class="highlight"><pre><span></span><code><span class="n">myDataFrame</span> <span class="o">=</span> <span class="n">sedona</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s2">"YOUR_SQL"</span><span class="p">)</span> |
| <span class="n">myDataFrame</span><span class="o">.</span><span class="n">createOrReplaceTempView</span><span class="p">(</span><span class="s2">"spatialDf"</span><span class="p">)</span> |
| </code></pre></div> |
| </div> |
| </div> |
| </div> |
| <p>Detailed SedonaSQL APIs are available here: <a href="../../api/sql/Overview/">SedonaSQL API</a>. You can find example county data (i.e., <code>county_small.tsv</code>) in <a href="https://github.com/apache/sedona/tree/master/spark/common/src/test/resources">Sedona GitHub repo</a>.</p> |
| <h2 id="set-up-dependencies">Set up dependencies<a class="headerlink" href="#set-up-dependencies" title="Permanent link">¶</a></h2> |
| <div class="tabbed-set tabbed-alternate" data-tabs="2:2"><input checked="checked" id="__tabbed_2_1" name="__tabbed_2" type="radio" /><input id="__tabbed_2_2" name="__tabbed_2" type="radio" /><div class="tabbed-labels"><label for="__tabbed_2_1">Scala/Java</label><label for="__tabbed_2_2">Python</label></div> |
| <div class="tabbed-content"> |
| <div class="tabbed-block"> |
| <ol> |
| <li>Read <a href="../../setup/maven-coordinates/">Sedona Maven Central coordinates</a> and add Sedona dependencies in build.sbt or pom.xml.</li> |
| <li>Add <a href="https://mvnrepository.com/artifact/org.apache.spark/spark-core_2.11">Apache Spark core</a>, <a href="https://mvnrepository.com/artifact/org.apache.spark/spark-sql">Apache SparkSQL</a> in build.sbt or pom.xml.</li> |
| <li>Please see <a href="../demo/">SQL example project</a></li> |
| </ol> |
| </div> |
| <div class="tabbed-block"> |
| <ol> |
| <li>Please read <a href="../../setup/install-python/">Quick start</a> to install Sedona Python.</li> |
| <li>This tutorial is based on <a href="../jupyter-notebook/">Sedona SQL Jupyter Notebook example</a>.</li> |
| </ol> |
| </div> |
| </div> |
| </div> |
| <h2 id="create-sedona-config">Create Sedona config<a class="headerlink" href="#create-sedona-config" title="Permanent link">¶</a></h2> |
| <p>Use the following code to create your Sedona config at the beginning. If you already have a SparkSession (usually named <code>spark</code>) created by AWS EMR/Databricks/Microsoft Fabric, please <mark>skip this step</mark>.</p> |
| <p>You can add additional Spark runtime config to the config builder. For example, <code>SedonaContext.builder().config("spark.sql.autoBroadcastJoinThreshold", "10485760")</code></p> |
| <div class="tabbed-set tabbed-alternate" data-tabs="3:3"><input checked="checked" id="__tabbed_3_1" name="__tabbed_3" type="radio" /><input id="__tabbed_3_2" name="__tabbed_3" type="radio" /><input id="__tabbed_3_3" name="__tabbed_3" type="radio" /><div class="tabbed-labels"><label for="__tabbed_3_1">Scala</label><label for="__tabbed_3_2">Java</label><label for="__tabbed_3_3">Python</label></div> |
| <div class="tabbed-content"> |
| <div class="tabbed-block"> |
| <p><div class="highlight"><pre><span></span><code><span class="k">import</span><span class="w"> </span><span class="nn">org</span><span class="p">.</span><span class="nn">apache</span><span class="p">.</span><span class="nn">sedona</span><span class="p">.</span><span class="nn">spark</span><span class="p">.</span><span class="nc">SedonaContext</span> |
| |
| <span class="kd">val</span><span class="w"> </span><span class="n">config</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nc">SedonaContext</span><span class="p">.</span><span class="n">builder</span><span class="p">()</span> |
| <span class="p">.</span><span class="n">master</span><span class="p">(</span><span class="s">"local[*]"</span><span class="p">)</span><span class="w"> </span><span class="c1">// Delete this if run in cluster mode</span> |
| <span class="p">.</span><span class="n">appName</span><span class="p">(</span><span class="s">"readTestScala"</span><span class="p">)</span><span class="w"> </span><span class="c1">// Change this to a proper name</span> |
| <span class="p">.</span><span class="n">getOrCreate</span><span class="p">()</span> |
| </code></pre></div> |
| If you use SedonaViz together with SedonaSQL, please add the following line after <code>SedonaContext.builder()</code> to enable Sedona Kryo serializer: |
| <div class="highlight"><pre><span></span><code><span class="p">.</span><span class="n">config</span><span class="p">(</span><span class="s">"spark.kryo.registrator"</span><span class="p">,</span><span class="w"> </span><span class="k">classOf</span><span class="p">[</span><span class="nc">SedonaVizKryoRegistrator</span><span class="p">].</span><span class="n">getName</span><span class="p">)</span><span class="w"> </span><span class="c1">// org.apache.sedona.viz.core.Serde.SedonaVizKryoRegistrator</span> |
| </code></pre></div></p> |
| </div> |
| <div class="tabbed-block"> |
| <p><div class="highlight"><pre><span></span><code><span class="kn">import</span><span class="w"> </span><span class="nn">org.apache.sedona.spark.SedonaContext</span><span class="p">;</span> |
| |
| <span class="n">SparkSession</span><span class="w"> </span><span class="n">config</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">SedonaContext</span><span class="p">.</span><span class="na">builder</span><span class="p">()</span> |
| <span class="p">.</span><span class="na">master</span><span class="p">(</span><span class="s">"local[*]"</span><span class="p">)</span><span class="w"> </span><span class="c1">// Delete this if run in cluster mode</span> |
| <span class="p">.</span><span class="na">appName</span><span class="p">(</span><span class="s">"readTestJava"</span><span class="p">)</span><span class="w"> </span><span class="c1">// Change this to a proper name</span> |
| <span class="p">.</span><span class="na">getOrCreate</span><span class="p">()</span> |
| </code></pre></div> |
| If you use SedonaViz together with SedonaSQL, please add the following line after <code>SedonaContext.builder()</code> to enable Sedona Kryo serializer: |
| <div class="highlight"><pre><span></span><code><span class="p">.</span><span class="na">config</span><span class="p">(</span><span class="s">"spark.kryo.registrator"</span><span class="p">,</span><span class="w"> </span><span class="n">SedonaVizKryoRegistrator</span><span class="p">.</span><span class="na">class</span><span class="p">.</span><span class="na">getName</span><span class="p">())</span><span class="w"> </span><span class="c1">// org.apache.sedona.viz.core.Serde.SedonaVizKryoRegistrator</span> |
| </code></pre></div></p> |
| </div> |
| <div class="tabbed-block"> |
| <p><div class="highlight"><pre><span></span><code><span class="kn">from</span><span class="w"> </span><span class="nn">sedona.spark</span><span class="w"> </span><span class="kn">import</span> <span class="o">*</span> |
| |
| <span class="n">config</span> <span class="o">=</span> <span class="n">SedonaContext</span><span class="o">.</span><span class="n">builder</span><span class="p">()</span> <span class="o">.</span>\ |
| <span class="n">config</span><span class="p">(</span><span class="s1">'spark.jars.packages'</span><span class="p">,</span> |
| <span class="s1">'org.apache.sedona:sedona-spark-shaded-3.3_2.12:1.9.1,'</span> |
| <span class="s1">'org.datasyslab:geotools-wrapper:1.9.1-33.5'</span><span class="p">)</span><span class="o">.</span> \ |
| <span class="n">getOrCreate</span><span class="p">()</span> |
| </code></pre></div> |
| If you are using a different Spark version, please replace the <code>3.3</code> in package name of sedona-spark-shaded with the corresponding major.minor version of Spark, such as <code>sedona-spark-shaded-3.4_2.12:1.9.1</code>.</p> |
| </div> |
| </div> |
| </div> |
| <h2 id="initiate-sedonacontext">Initiate SedonaContext<a class="headerlink" href="#initiate-sedonacontext" title="Permanent link">¶</a></h2> |
| <p>Add the following line after creating Sedona config. If you already have a SparkSession (usually named <code>spark</code>) created by AWS EMR/Databricks/Microsoft Fabric, please call <code>sedona = SedonaContext.create(spark)</code> instead.</p> |
| <div class="tabbed-set tabbed-alternate" data-tabs="4:3"><input checked="checked" id="__tabbed_4_1" name="__tabbed_4" type="radio" /><input id="__tabbed_4_2" name="__tabbed_4" type="radio" /><input id="__tabbed_4_3" name="__tabbed_4" type="radio" /><div class="tabbed-labels"><label for="__tabbed_4_1">Scala</label><label for="__tabbed_4_2">Java</label><label for="__tabbed_4_3">Python</label></div> |
| <div class="tabbed-content"> |
| <div class="tabbed-block"> |
| <div class="highlight"><pre><span></span><code><span class="k">import</span><span class="w"> </span><span class="nn">org</span><span class="p">.</span><span class="nn">apache</span><span class="p">.</span><span class="nn">sedona</span><span class="p">.</span><span class="nn">spark</span><span class="p">.</span><span class="nc">SedonaContext</span> |
| |
| <span class="kd">val</span><span class="w"> </span><span class="n">sedona</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nc">SedonaContext</span><span class="p">.</span><span class="n">create</span><span class="p">(</span><span class="n">config</span><span class="p">)</span> |
| </code></pre></div> |
| </div> |
| <div class="tabbed-block"> |
| <div class="highlight"><pre><span></span><code><span class="kn">import</span><span class="w"> </span><span class="nn">org.apache.sedona.spark.SedonaContext</span><span class="p">;</span> |
| |
| <span class="n">SparkSession</span><span class="w"> </span><span class="n">sedona</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">SedonaContext</span><span class="p">.</span><span class="na">create</span><span class="p">(</span><span class="n">config</span><span class="p">)</span> |
| </code></pre></div> |
| </div> |
| <div class="tabbed-block"> |
| <div class="highlight"><pre><span></span><code><span class="kn">from</span><span class="w"> </span><span class="nn">sedona.spark</span><span class="w"> </span><span class="kn">import</span> <span class="o">*</span> |
| |
| <span class="n">sedona</span> <span class="o">=</span> <span class="n">SedonaContext</span><span class="o">.</span><span class="n">create</span><span class="p">(</span><span class="n">config</span><span class="p">)</span> |
| </code></pre></div> |
| </div> |
| </div> |
| </div> |
| <p>You can also register everything by passing <code>--conf spark.sql.extensions=org.apache.sedona.sql.SedonaSqlExtensions</code> to <code>spark-submit</code> or <code>spark-shell</code>.</p> |
| <h2 id="load-data-from-text-files">Load data from text files<a class="headerlink" href="#load-data-from-text-files" title="Permanent link">¶</a></h2> |
| <p>Assume we have a WKT file, namely <code>usa-county.tsv</code>, at Path <code>/Download/usa-county.tsv</code> as follows:</p> |
| <div class="highlight"><pre><span></span><code>POLYGON (..., ...) Cuming County |
| POLYGON (..., ...) Wahkiakum County |
| POLYGON (..., ...) De Baca County |
| POLYGON (..., ...) Lancaster County |
| </code></pre></div> |
| <p>The file may have many other columns.</p> |
| <h3 id="load-the-raw-dataframe">Load the raw DataFrame<a class="headerlink" href="#load-the-raw-dataframe" title="Permanent link">¶</a></h3> |
| <p>Use the following code to load the data and create a raw DataFrame:</p> |
| <div class="tabbed-set tabbed-alternate" data-tabs="5:3"><input checked="checked" id="__tabbed_5_1" name="__tabbed_5" type="radio" /><input id="__tabbed_5_2" name="__tabbed_5" type="radio" /><input id="__tabbed_5_3" name="__tabbed_5" type="radio" /><div class="tabbed-labels"><label for="__tabbed_5_1">Scala</label><label for="__tabbed_5_2">Java</label><label for="__tabbed_5_3">Python</label></div> |
| <div class="tabbed-content"> |
| <div class="tabbed-block"> |
| <div class="highlight"><pre><span></span><code><span class="kd">var</span><span class="w"> </span><span class="n">rawDf</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">sedona</span><span class="p">.</span><span class="n">read</span><span class="p">.</span><span class="n">format</span><span class="p">(</span><span class="s">"csv"</span><span class="p">).</span><span class="n">option</span><span class="p">(</span><span class="s">"delimiter"</span><span class="p">,</span><span class="w"> </span><span class="s">"\t"</span><span class="p">).</span><span class="n">option</span><span class="p">(</span><span class="s">"header"</span><span class="p">,</span><span class="w"> </span><span class="s">"false"</span><span class="p">).</span><span class="n">load</span><span class="p">(</span><span class="s">"/Download/usa-county.tsv"</span><span class="p">)</span> |
| <span class="n">rawDf</span><span class="p">.</span><span class="n">createOrReplaceTempView</span><span class="p">(</span><span class="s">"rawdf"</span><span class="p">)</span> |
| <span class="n">rawDf</span><span class="p">.</span><span class="n">show</span><span class="p">()</span> |
| </code></pre></div> |
| </div> |
| <div class="tabbed-block"> |
| <div class="highlight"><pre><span></span><code><span class="n">Dataset</span><span class="o"><</span><span class="n">Row</span><span class="o">></span><span class="w"> </span><span class="n">rawDf</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">sedona</span><span class="p">.</span><span class="na">read</span><span class="p">.</span><span class="na">format</span><span class="p">(</span><span class="s">"csv"</span><span class="p">).</span><span class="na">option</span><span class="p">(</span><span class="s">"delimiter"</span><span class="p">,</span><span class="w"> </span><span class="s">"\t"</span><span class="p">).</span><span class="na">option</span><span class="p">(</span><span class="s">"header"</span><span class="p">,</span><span class="w"> </span><span class="s">"false"</span><span class="p">).</span><span class="na">load</span><span class="p">(</span><span class="s">"/Download/usa-county.tsv"</span><span class="p">)</span> |
| <span class="n">rawDf</span><span class="p">.</span><span class="na">createOrReplaceTempView</span><span class="p">(</span><span class="s">"rawdf"</span><span class="p">)</span> |
| <span class="n">rawDf</span><span class="p">.</span><span class="na">show</span><span class="p">()</span> |
| </code></pre></div> |
| </div> |
| <div class="tabbed-block"> |
| <div class="highlight"><pre><span></span><code><span class="n">rawDf</span> <span class="o">=</span> <span class="n">sedona</span><span class="o">.</span><span class="n">read</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="s2">"csv"</span><span class="p">)</span><span class="o">.</span><span class="n">option</span><span class="p">(</span><span class="s2">"delimiter"</span><span class="p">,</span> <span class="s2">"</span><span class="se">\t</span><span class="s2">"</span><span class="p">)</span><span class="o">.</span><span class="n">option</span><span class="p">(</span><span class="s2">"header"</span><span class="p">,</span> <span class="s2">"false"</span><span class="p">)</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="s2">"/Download/usa-county.tsv"</span><span class="p">)</span> |
| <span class="n">rawDf</span><span class="o">.</span><span class="n">createOrReplaceTempView</span><span class="p">(</span><span class="s2">"rawdf"</span><span class="p">)</span> |
| <span class="n">rawDf</span><span class="o">.</span><span class="n">show</span><span class="p">()</span> |
| </code></pre></div> |
| </div> |
| </div> |
| </div> |
| <p>The output will be like this:</p> |
| <div class="highlight"><pre><span></span><code>| _c0|_c1|_c2| _c3| _c4| _c5| _c6|_c7|_c8| _c9|_c10| _c11|_c12|_c13| _c14| _c15| _c16| _c17| |
| +--------------------+---+---+--------+-----+-----------+--------------------+---+---+-----+----+-----+----+----+----------+--------+-----------+------------+ |
| |POLYGON ((-97.019...| 31|039|00835841|31039| Cuming| Cuming County| 06| H1|G4020|null| null|null| A|1477895811|10447360|+41.9158651|-096.7885168| |
| |POLYGON ((-123.43...| 53|069|01513275|53069| Wahkiakum| Wahkiakum County| 06| H1|G4020|null| null|null| A| 682138871|61658258|+46.2946377|-123.4244583| |
| |POLYGON ((-104.56...| 35|011|00933054|35011| De Baca| De Baca County| 06| H1|G4020|null| null|null| A|6015539696|29159492|+34.3592729|-104.3686961| |
| |POLYGON ((-96.910...| 31|109|00835876|31109| Lancaster| Lancaster County| 06| H1|G4020| 339|30700|null| A|2169240202|22877180|+40.7835474|-096.6886584| |
| </code></pre></div> |
| <h3 id="create-a-geometry-type-column">Create a Geometry type column<a class="headerlink" href="#create-a-geometry-type-column" title="Permanent link">¶</a></h3> |
| <p>All geometrical operations in SedonaSQL are on Geometry type objects. Therefore, before any kind of queries, you need to create a Geometry type column on a DataFrame.</p> |
| <div class="highlight"><pre><span></span><code><span class="k">SELECT</span><span class="w"> </span><span class="n">ST_GeomFromWKT</span><span class="p">(</span><span class="n">_c0</span><span class="p">)</span><span class="w"> </span><span class="k">AS</span><span class="w"> </span><span class="n">countyshape</span><span class="p">,</span><span class="w"> </span><span class="n">_c1</span><span class="p">,</span><span class="w"> </span><span class="n">_c2</span> |
| </code></pre></div> |
| <p>You can select many other attributes to compose this <code>spatialdDf</code>. The output will be something like this:</p> |
| <div class="highlight"><pre><span></span><code>| countyshape|_c1|_c2| _c3| _c4| _c5| _c6|_c7|_c8| _c9|_c10| _c11|_c12|_c13| _c14| _c15| _c16| _c17| |
| +--------------------+---+---+--------+-----+-----------+--------------------+---+---+-----+----+-----+----+----+----------+--------+-----------+------------+ |
| |POLYGON ((-97.019...| 31|039|00835841|31039| Cuming| Cuming County| 06| H1|G4020|null| null|null| A|1477895811|10447360|+41.9158651|-096.7885168| |
| |POLYGON ((-123.43...| 53|069|01513275|53069| Wahkiakum| Wahkiakum County| 06| H1|G4020|null| null|null| A| 682138871|61658258|+46.2946377|-123.4244583| |
| |POLYGON ((-104.56...| 35|011|00933054|35011| De Baca| De Baca County| 06| H1|G4020|null| null|null| A|6015539696|29159492|+34.3592729|-104.3686961| |
| |POLYGON ((-96.910...| 31|109|00835876|31109| Lancaster| Lancaster County| 06| H1|G4020| 339|30700|null| A|2169240202|22877180|+40.7835474|-096.6886584| |
| </code></pre></div> |
| <p>Although it looks same with the input, but actually the type of column countyshape has been changed to <mark>Geometry</mark> type.</p> |
| <p>To verify this, use the following code to print the schema of the DataFrame:</p> |
| <div class="highlight"><pre><span></span><code><span class="n">spatialDf</span><span class="p">.</span><span class="n">printSchema</span><span class="p">()</span> |
| </code></pre></div> |
| <p>The output will be like this:</p> |
| <div class="highlight"><pre><span></span><code>root |
| |-- countyshape: geometry (nullable = false) |
| |-- _c1: string (nullable = true) |
| |-- _c2: string (nullable = true) |
| |-- _c3: string (nullable = true) |
| |-- _c4: string (nullable = true) |
| |-- _c5: string (nullable = true) |
| |-- _c6: string (nullable = true) |
| |-- _c7: string (nullable = true) |
| </code></pre></div> |
| <div class="admonition note"> |
| <p class="admonition-title">Note</p> |
| <p>SedonaSQL provides lots of functions to create a Geometry column, please read <a href="../../api/sql/Geometry-Functions/">SedonaSQL constructor API</a>.</p> |
| </div> |
| <h2 id="load-geojson-data">Load GeoJSON Data<a class="headerlink" href="#load-geojson-data" title="Permanent link">¶</a></h2> |
| <p>Since <code>v1.6.1</code>, Sedona supports reading GeoJSON files using the <code>geojson</code> data source. It is designed to handle JSON files that use <a href="https://datatracker.ietf.org/doc/html/rfc7946">GeoJSON format</a> for their geometries.</p> |
| <p>Set the <code>multiLine</code> option to <code>True</code> to read multiline GeoJSON files.</p> |
| <div class="tabbed-set tabbed-alternate" data-tabs="6:3"><input checked="checked" id="__tabbed_6_1" name="__tabbed_6" type="radio" /><input id="__tabbed_6_2" name="__tabbed_6" type="radio" /><input id="__tabbed_6_3" name="__tabbed_6" type="radio" /><div class="tabbed-labels"><label for="__tabbed_6_1">Python</label><label for="__tabbed_6_2">Scala</label><label for="__tabbed_6_3">Java</label></div> |
| <div class="tabbed-content"> |
| <div class="tabbed-block"> |
| <div class="highlight"><pre><span></span><code><span class="n">df</span> <span class="o">=</span> <span class="p">(</span> |
| <span class="n">sedona</span><span class="o">.</span><span class="n">read</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="s2">"geojson"</span><span class="p">)</span> |
| <span class="o">.</span><span class="n">option</span><span class="p">(</span><span class="s2">"multiLine"</span><span class="p">,</span> <span class="s2">"true"</span><span class="p">)</span> |
| <span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="s2">"PATH/TO/MYFILE.json"</span><span class="p">)</span> |
| <span class="o">.</span><span class="n">selectExpr</span><span class="p">(</span><span class="s2">"explode(features) as features"</span><span class="p">)</span> <span class="c1"># Explode the envelope</span> |
| <span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="s2">"features.*"</span><span class="p">)</span> <span class="c1"># Unpack the features struct</span> |
| <span class="o">.</span><span class="n">withColumn</span><span class="p">(</span><span class="s2">"prop0"</span><span class="p">,</span> <span class="n">f</span><span class="o">.</span><span class="n">expr</span><span class="p">(</span><span class="s2">"properties['prop0']"</span><span class="p">))</span> |
| <span class="o">.</span><span class="n">drop</span><span class="p">(</span><span class="s2">"properties"</span><span class="p">)</span> |
| <span class="o">.</span><span class="n">drop</span><span class="p">(</span><span class="s2">"type"</span><span class="p">)</span> |
| <span class="p">)</span> |
| |
| <span class="n">df</span><span class="o">.</span><span class="n">show</span><span class="p">()</span> |
| <span class="n">df</span><span class="o">.</span><span class="n">printSchema</span><span class="p">()</span> |
| </code></pre></div> |
| </div> |
| <div class="tabbed-block"> |
| <div class="highlight"><pre><span></span><code><span class="kd">val</span><span class="w"> </span><span class="n">df</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">sedona</span><span class="p">.</span><span class="n">read</span><span class="p">.</span><span class="n">format</span><span class="p">(</span><span class="s">"geojson"</span><span class="p">).</span><span class="n">option</span><span class="p">(</span><span class="s">"multiLine"</span><span class="p">,</span><span class="w"> </span><span class="s">"true"</span><span class="p">).</span><span class="n">load</span><span class="p">(</span><span class="s">"PATH/TO/MYFILE.json"</span><span class="p">)</span> |
| <span class="kd">val</span><span class="w"> </span><span class="n">parsedDf</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">df</span><span class="p">.</span><span class="n">selectExpr</span><span class="p">(</span><span class="s">"explode(features) as features"</span><span class="p">).</span><span class="n">select</span><span class="p">(</span><span class="s">"features.*"</span><span class="p">)</span> |
| <span class="w"> </span><span class="p">.</span><span class="n">withColumn</span><span class="p">(</span><span class="s">"prop0"</span><span class="p">,</span><span class="w"> </span><span class="n">expr</span><span class="p">(</span><span class="s">"properties['prop0']"</span><span class="p">)).</span><span class="n">drop</span><span class="p">(</span><span class="s">"properties"</span><span class="p">).</span><span class="n">drop</span><span class="p">(</span><span class="s">"type"</span><span class="p">)</span> |
| |
| <span class="n">parsedDf</span><span class="p">.</span><span class="n">show</span><span class="p">()</span> |
| <span class="n">parsedDf</span><span class="p">.</span><span class="n">printSchema</span><span class="p">()</span> |
| </code></pre></div> |
| </div> |
| <div class="tabbed-block"> |
| <div class="highlight"><pre><span></span><code><span class="n">Dataset</span><span class="o"><</span><span class="n">Row</span><span class="o">></span><span class="w"> </span><span class="n">df</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">sedona</span><span class="p">.</span><span class="na">read</span><span class="p">.</span><span class="na">format</span><span class="p">(</span><span class="s">"geojson"</span><span class="p">).</span><span class="na">option</span><span class="p">(</span><span class="s">"multiLine"</span><span class="p">,</span><span class="w"> </span><span class="s">"true"</span><span class="p">).</span><span class="na">load</span><span class="p">(</span><span class="s">"PATH/TO/MYFILE.json"</span><span class="p">)</span> |
| <span class="w"> </span><span class="p">.</span><span class="na">selectExpr</span><span class="p">(</span><span class="s">"explode(features) as features"</span><span class="p">)</span><span class="w"> </span><span class="c1">// Explode the envelope to get one feature per row.</span> |
| <span class="w"> </span><span class="p">.</span><span class="na">select</span><span class="p">(</span><span class="s">"features.*"</span><span class="p">)</span><span class="w"> </span><span class="c1">// Unpack the features struct.</span> |
| <span class="w"> </span><span class="p">.</span><span class="na">withColumn</span><span class="p">(</span><span class="s">"prop0"</span><span class="p">,</span><span class="w"> </span><span class="n">expr</span><span class="p">(</span><span class="s">"properties['prop0']"</span><span class="p">)).</span><span class="na">drop</span><span class="p">(</span><span class="s">"properties"</span><span class="p">).</span><span class="na">drop</span><span class="p">(</span><span class="s">"type"</span><span class="p">)</span> |
| |
| <span class="n">df</span><span class="p">.</span><span class="na">show</span><span class="p">();</span> |
| <span class="n">df</span><span class="p">.</span><span class="na">printSchema</span><span class="p">();</span> |
| </code></pre></div> |
| </div> |
| </div> |
| </div> |
| <p>See <a href="../files/geojson-sedona-spark/">this page</a> for more information on loading GeoJSON files.</p> |
| <h2 id="load-shapefile">Load Shapefile<a class="headerlink" href="#load-shapefile" title="Permanent link">¶</a></h2> |
| <p>Since v<code>1.7.0</code>, Sedona supports loading Shapefile as a DataFrame.</p> |
| <div class="tabbed-set tabbed-alternate" data-tabs="7:3"><input checked="checked" id="__tabbed_7_1" name="__tabbed_7" type="radio" /><input id="__tabbed_7_2" name="__tabbed_7" type="radio" /><input id="__tabbed_7_3" name="__tabbed_7" type="radio" /><div class="tabbed-labels"><label for="__tabbed_7_1">Scala/Java</label><label for="__tabbed_7_2">Java</label><label for="__tabbed_7_3">Python</label></div> |
| <div class="tabbed-content"> |
| <div class="tabbed-block"> |
| <div class="highlight"><pre><span></span><code><span class="kd">val</span><span class="w"> </span><span class="n">df</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">sedona</span><span class="p">.</span><span class="n">read</span><span class="p">.</span><span class="n">format</span><span class="p">(</span><span class="s">"shapefile"</span><span class="p">).</span><span class="n">load</span><span class="p">(</span><span class="s">"/path/to/shapefile"</span><span class="p">)</span> |
| </code></pre></div> |
| </div> |
| <div class="tabbed-block"> |
| <div class="highlight"><pre><span></span><code><span class="n">Dataset</span><span class="o"><</span><span class="n">Row</span><span class="o">></span><span class="w"> </span><span class="n">df</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">sedona</span><span class="p">.</span><span class="na">read</span><span class="p">().</span><span class="na">format</span><span class="p">(</span><span class="s">"shapefile"</span><span class="p">).</span><span class="na">load</span><span class="p">(</span><span class="s">"/path/to/shapefile"</span><span class="p">)</span> |
| </code></pre></div> |
| </div> |
| <div class="tabbed-block"> |
| <div class="highlight"><pre><span></span><code><span class="n">df</span> <span class="o">=</span> <span class="n">sedona</span><span class="o">.</span><span class="n">read</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="s2">"shapefile"</span><span class="p">)</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="s2">"/path/to/shapefile"</span><span class="p">)</span> |
| </code></pre></div> |
| </div> |
| </div> |
| </div> |
| <p>The input path can be a directory containing one or multiple shapefiles, or path to a <code>.shp</code> file.</p> |
| <p>See <a href="../files/shapefiles-sedona-spark/">this page</a> for more information on loading Shapefiles.</p> |
| <h2 id="load-geoparquet">Load GeoParquet<a class="headerlink" href="#load-geoparquet" title="Permanent link">¶</a></h2> |
| <p>Since v<code>1.3.0</code>, Sedona natively supports loading GeoParquet file. Sedona will infer geometry fields using the "geo" metadata in GeoParquet files.</p> |
| <div class="tabbed-set tabbed-alternate" data-tabs="8:3"><input checked="checked" id="__tabbed_8_1" name="__tabbed_8" type="radio" /><input id="__tabbed_8_2" name="__tabbed_8" type="radio" /><input id="__tabbed_8_3" name="__tabbed_8" type="radio" /><div class="tabbed-labels"><label for="__tabbed_8_1">Scala/Java</label><label for="__tabbed_8_2">Java</label><label for="__tabbed_8_3">Python</label></div> |
| <div class="tabbed-content"> |
| <div class="tabbed-block"> |
| <div class="highlight"><pre><span></span><code><span class="kd">val</span><span class="w"> </span><span class="n">df</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">sedona</span><span class="p">.</span><span class="n">read</span><span class="p">.</span><span class="n">format</span><span class="p">(</span><span class="s">"geoparquet"</span><span class="p">).</span><span class="n">load</span><span class="p">(</span><span class="n">geoparquetdatalocation1</span><span class="p">)</span> |
| <span class="n">df</span><span class="p">.</span><span class="n">printSchema</span><span class="p">()</span> |
| </code></pre></div> |
| </div> |
| <div class="tabbed-block"> |
| <div class="highlight"><pre><span></span><code><span class="n">Dataset</span><span class="o"><</span><span class="n">Row</span><span class="o">></span><span class="w"> </span><span class="n">df</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">sedona</span><span class="p">.</span><span class="na">read</span><span class="p">.</span><span class="na">format</span><span class="p">(</span><span class="s">"geoparquet"</span><span class="p">).</span><span class="na">load</span><span class="p">(</span><span class="n">geoparquetdatalocation1</span><span class="p">)</span> |
| <span class="n">df</span><span class="p">.</span><span class="na">printSchema</span><span class="p">()</span> |
| </code></pre></div> |
| </div> |
| <div class="tabbed-block"> |
| <div class="highlight"><pre><span></span><code><span class="n">df</span> <span class="o">=</span> <span class="n">sedona</span><span class="o">.</span><span class="n">read</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="s2">"geoparquet"</span><span class="p">)</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="n">geoparquetdatalocation1</span><span class="p">)</span> |
| <span class="n">df</span><span class="o">.</span><span class="n">printSchema</span><span class="p">()</span> |
| </code></pre></div> |
| </div> |
| </div> |
| </div> |
| <p>The output will be as follows:</p> |
| <div class="highlight"><pre><span></span><code>root |
| |-- pop_est: long (nullable = true) |
| |-- continent: string (nullable = true) |
| |-- name: string (nullable = true) |
| |-- iso_a3: string (nullable = true) |
| |-- gdp_md_est: double (nullable = true) |
| |-- geometry: geometry (nullable = true) |
| </code></pre></div> |
| <p>Sedona supports spatial predicate push-down for GeoParquet files, please refer to the <a href="../../api/sql/Optimizer/">SedonaSQL query optimizer</a> documentation for details.</p> |
| <p>GeoParquet file reader can also be used to read legacy Parquet files written by Apache Sedona 1.3.1-incubating or earlier. |
| Please refer to <a href="../../api/sql/Reading-legacy-parquet/">Reading Legacy Parquet Files</a> for details.</p> |
| <p>See <a href="../files/geoparquet-sedona-spark/">this page</a> for more information on loading GeoParquet.</p> |
| <h2 id="load-data-from-stac-catalog">Load data from STAC catalog<a class="headerlink" href="#load-data-from-stac-catalog" title="Permanent link">¶</a></h2> |
| <p>Sedona STAC data source allows you to read data from a SpatioTemporal Asset Catalog (STAC) API. The data source supports reading STAC items and collections.</p> |
| <p>You can load a STAC collection from a s3 collection file object:</p> |
| <div class="highlight"><pre><span></span><code><span class="n">df</span> <span class="o">=</span> <span class="n">sedona</span><span class="o">.</span><span class="n">read</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="s2">"stac"</span><span class="p">)</span><span class="o">.</span><span class="n">load</span><span class="p">(</span> |
| <span class="s2">"s3a://example.com/stac_bucket/stac_collection.json"</span> |
| <span class="p">)</span> |
| </code></pre></div> |
| <p>You can also load a STAC collection from an HTTP/HTTPS endpoint:</p> |
| <div class="highlight"><pre><span></span><code><span class="n">df</span> <span class="o">=</span> <span class="n">sedona</span><span class="o">.</span><span class="n">read</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="s2">"stac"</span><span class="p">)</span><span class="o">.</span><span class="n">load</span><span class="p">(</span> |
| <span class="s2">"https://earth-search.aws.element84.com/v1/collections/sentinel-2-pre-c1-l2a"</span> |
| <span class="p">)</span> |
| </code></pre></div> |
| <p>The STAC data source supports predicate pushdown for spatial and temporal filters. The data source can push down spatial and temporal filters to the underlying data source to reduce the amount of data that needs to be read.</p> |
| <p>See <a href="../files/stac-sedona-spark/">this page</a> for more information on loading data from STAC.</p> |
| <h2 id="load-data-from-jdbc-data-sources">Load data from JDBC data sources<a class="headerlink" href="#load-data-from-jdbc-data-sources" title="Permanent link">¶</a></h2> |
| <p>The 'query' option in Spark SQL's JDBC data source can be used to convert geometry columns to a format that Sedona can interpret. |
| This should work for most spatial JDBC data sources. |
| For Postgis there is no need to add a query to convert geometry types since it's already using EWKB as it's wire format.</p> |
| <div class="tabbed-set tabbed-alternate" data-tabs="9:3"><input checked="checked" id="__tabbed_9_1" name="__tabbed_9" type="radio" /><input id="__tabbed_9_2" name="__tabbed_9" type="radio" /><input id="__tabbed_9_3" name="__tabbed_9" type="radio" /><div class="tabbed-labels"><label for="__tabbed_9_1">Scala</label><label for="__tabbed_9_2">Java</label><label for="__tabbed_9_3">Python</label></div> |
| <div class="tabbed-content"> |
| <div class="tabbed-block"> |
| <div class="highlight"><pre><span></span><code><span class="c1">// For any JDBC data source, including Postgis.</span> |
| <span class="kd">val</span><span class="w"> </span><span class="n">df</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">sedona</span><span class="p">.</span><span class="n">read</span><span class="p">.</span><span class="n">format</span><span class="p">(</span><span class="s">"jdbc"</span><span class="p">)</span> |
| <span class="w"> </span><span class="c1">// Other options.</span> |
| <span class="w"> </span><span class="p">.</span><span class="n">option</span><span class="p">(</span><span class="s">"query"</span><span class="p">,</span><span class="w"> </span><span class="s">"SELECT id, ST_AsBinary(geom) as geom FROM my_table"</span><span class="p">)</span> |
| <span class="w"> </span><span class="p">.</span><span class="n">load</span><span class="p">()</span> |
| <span class="w"> </span><span class="p">.</span><span class="n">withColumn</span><span class="p">(</span><span class="s">"geom"</span><span class="p">,</span><span class="w"> </span><span class="n">expr</span><span class="p">(</span><span class="s">"ST_GeomFromWKB(geom)"</span><span class="p">))</span> |
| |
| <span class="c1">// This is a simplified version that works for Postgis.</span> |
| <span class="kd">val</span><span class="w"> </span><span class="n">df</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">sedona</span><span class="p">.</span><span class="n">read</span><span class="p">.</span><span class="n">format</span><span class="p">(</span><span class="s">"jdbc"</span><span class="p">)</span> |
| <span class="w"> </span><span class="c1">// Other options.</span> |
| <span class="w"> </span><span class="p">.</span><span class="n">option</span><span class="p">(</span><span class="s">"dbtable"</span><span class="p">,</span><span class="w"> </span><span class="s">"my_table"</span><span class="p">)</span> |
| <span class="w"> </span><span class="p">.</span><span class="n">load</span><span class="p">()</span> |
| <span class="w"> </span><span class="p">.</span><span class="n">withColumn</span><span class="p">(</span><span class="s">"geom"</span><span class="p">,</span><span class="w"> </span><span class="n">expr</span><span class="p">(</span><span class="s">"ST_GeomFromWKB(geom)"</span><span class="p">))</span> |
| </code></pre></div> |
| </div> |
| <div class="tabbed-block"> |
| <div class="highlight"><pre><span></span><code><span class="c1">// For any JDBC data source, including Postgis.</span> |
| <span class="n">Dataset</span><span class="o"><</span><span class="n">Row</span><span class="o">></span><span class="w"> </span><span class="n">df</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">sedona</span><span class="p">.</span><span class="na">read</span><span class="p">().</span><span class="na">format</span><span class="p">(</span><span class="s">"jdbc"</span><span class="p">)</span> |
| <span class="w"> </span><span class="c1">// Other options.</span> |
| <span class="w"> </span><span class="p">.</span><span class="na">option</span><span class="p">(</span><span class="s">"query"</span><span class="p">,</span><span class="w"> </span><span class="s">"SELECT id, ST_AsBinary(geom) as geom FROM my_table"</span><span class="p">)</span> |
| <span class="w"> </span><span class="p">.</span><span class="na">load</span><span class="p">()</span> |
| <span class="w"> </span><span class="p">.</span><span class="na">withColumn</span><span class="p">(</span><span class="s">"geom"</span><span class="p">,</span><span class="w"> </span><span class="n">expr</span><span class="p">(</span><span class="s">"ST_GeomFromWKB(geom)"</span><span class="p">))</span> |
| |
| <span class="c1">// This is a simplified version that works for Postgis.</span> |
| <span class="n">Dataset</span><span class="o"><</span><span class="n">Row</span><span class="o">></span><span class="w"> </span><span class="n">df</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">sedona</span><span class="p">.</span><span class="na">read</span><span class="p">().</span><span class="na">format</span><span class="p">(</span><span class="s">"jdbc"</span><span class="p">)</span> |
| <span class="w"> </span><span class="c1">// Other options.</span> |
| <span class="w"> </span><span class="p">.</span><span class="na">option</span><span class="p">(</span><span class="s">"dbtable"</span><span class="p">,</span><span class="w"> </span><span class="s">"my_table"</span><span class="p">)</span> |
| <span class="w"> </span><span class="p">.</span><span class="na">load</span><span class="p">()</span> |
| <span class="w"> </span><span class="p">.</span><span class="na">withColumn</span><span class="p">(</span><span class="s">"geom"</span><span class="p">,</span><span class="w"> </span><span class="n">expr</span><span class="p">(</span><span class="s">"ST_GeomFromWKB(geom)"</span><span class="p">))</span> |
| </code></pre></div> |
| </div> |
| <div class="tabbed-block"> |
| <div class="highlight"><pre><span></span><code><span class="c1"># For any JDBC data source, including Postgis.</span> |
| <span class="n">df</span> <span class="o">=</span> <span class="p">(</span><span class="n">sedona</span><span class="o">.</span><span class="n">read</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="s2">"jdbc"</span><span class="p">)</span> |
| <span class="c1"># Other options.</span> |
| <span class="o">.</span><span class="n">option</span><span class="p">(</span><span class="s2">"query"</span><span class="p">,</span> <span class="s2">"SELECT id, ST_AsBinary(geom) as geom FROM my_table"</span><span class="p">)</span> |
| <span class="o">.</span><span class="n">load</span><span class="p">()</span> |
| <span class="o">.</span><span class="n">withColumn</span><span class="p">(</span><span class="s2">"geom"</span><span class="p">,</span> <span class="n">f</span><span class="o">.</span><span class="n">expr</span><span class="p">(</span><span class="s2">"ST_GeomFromWKB(geom)"</span><span class="p">)))</span> |
| |
| <span class="c1"># This is a simplified version that works for Postgis.</span> |
| <span class="n">df</span> <span class="o">=</span> <span class="p">(</span><span class="n">sedona</span><span class="o">.</span><span class="n">read</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="s2">"jdbc"</span><span class="p">)</span> |
| <span class="c1"># Other options.</span> |
| <span class="o">.</span><span class="n">option</span><span class="p">(</span><span class="s2">"dbtable"</span><span class="p">,</span> <span class="s2">"my_table"</span><span class="p">)</span> |
| <span class="o">.</span><span class="n">load</span><span class="p">()</span> |
| <span class="o">.</span><span class="n">withColumn</span><span class="p">(</span><span class="s2">"geom"</span><span class="p">,</span> <span class="n">f</span><span class="o">.</span><span class="n">expr</span><span class="p">(</span><span class="s2">"ST_GeomFromWKB(geom)"</span><span class="p">)))</span> |
| </code></pre></div> |
| </div> |
| </div> |
| </div> |
| <h2 id="load-geopackage">Load GeoPackage<a class="headerlink" href="#load-geopackage" title="Permanent link">¶</a></h2> |
| <p>Since v1.7.0, Sedona supports loading Geopackage file format as a DataFrame.</p> |
| <div class="tabbed-set tabbed-alternate" data-tabs="10:3"><input checked="checked" id="__tabbed_10_1" name="__tabbed_10" type="radio" /><input id="__tabbed_10_2" name="__tabbed_10" type="radio" /><input id="__tabbed_10_3" name="__tabbed_10" type="radio" /><div class="tabbed-labels"><label for="__tabbed_10_1">Scala/Java</label><label for="__tabbed_10_2">Java</label><label for="__tabbed_10_3">Python</label></div> |
| <div class="tabbed-content"> |
| <div class="tabbed-block"> |
| <div class="highlight"><pre><span></span><code><span class="kd">val</span><span class="w"> </span><span class="n">df</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">sedona</span><span class="p">.</span><span class="n">read</span><span class="p">.</span><span class="n">format</span><span class="p">(</span><span class="s">"geopackage"</span><span class="p">).</span><span class="n">option</span><span class="p">(</span><span class="s">"tableName"</span><span class="p">,</span><span class="w"> </span><span class="s">"tab"</span><span class="p">).</span><span class="n">load</span><span class="p">(</span><span class="s">"/path/to/geopackage"</span><span class="p">)</span> |
| </code></pre></div> |
| </div> |
| <div class="tabbed-block"> |
| <div class="highlight"><pre><span></span><code><span class="n">Dataset</span><span class="o"><</span><span class="n">Row</span><span class="o">></span><span class="w"> </span><span class="n">df</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">sedona</span><span class="p">.</span><span class="na">read</span><span class="p">().</span><span class="na">format</span><span class="p">(</span><span class="s">"geopackage"</span><span class="p">).</span><span class="na">option</span><span class="p">(</span><span class="s">"tableName"</span><span class="p">,</span><span class="w"> </span><span class="s">"tab"</span><span class="p">).</span><span class="na">load</span><span class="p">(</span><span class="s">"/path/to/geopackage"</span><span class="p">)</span> |
| </code></pre></div> |
| </div> |
| <div class="tabbed-block"> |
| <div class="highlight"><pre><span></span><code><span class="n">df</span> <span class="o">=</span> <span class="n">sedona</span><span class="o">.</span><span class="n">read</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="s2">"geopackage"</span><span class="p">)</span><span class="o">.</span><span class="n">option</span><span class="p">(</span><span class="s2">"tableName"</span><span class="p">,</span> <span class="s2">"tab"</span><span class="p">)</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="s2">"/path/to/geopackage"</span><span class="p">)</span> |
| </code></pre></div> |
| </div> |
| </div> |
| </div> |
| <p>See <a href="../files/geopackage-sedona-spark/">this page</a> for more information on loading GeoPackage.</p> |
| <h2 id="load-osm-pbf">Load OSM PBF<a class="headerlink" href="#load-osm-pbf" title="Permanent link">¶</a></h2> |
| <p>Since v1.7.1, Sedona supports loading OSM PBF file format as a DataFrame.</p> |
| <div class="tabbed-set tabbed-alternate" data-tabs="11:3"><input checked="checked" id="__tabbed_11_1" name="__tabbed_11" type="radio" /><input id="__tabbed_11_2" name="__tabbed_11" type="radio" /><input id="__tabbed_11_3" name="__tabbed_11" type="radio" /><div class="tabbed-labels"><label for="__tabbed_11_1">Scala/Java</label><label for="__tabbed_11_2">Java</label><label for="__tabbed_11_3">Python</label></div> |
| <div class="tabbed-content"> |
| <div class="tabbed-block"> |
| <div class="highlight"><pre><span></span><code><span class="kd">val</span><span class="w"> </span><span class="n">df</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">sedona</span><span class="p">.</span><span class="n">read</span><span class="p">.</span><span class="n">format</span><span class="p">(</span><span class="s">"osmpbf"</span><span class="p">).</span><span class="n">load</span><span class="p">(</span><span class="s">"/path/to/osmpbf"</span><span class="p">)</span> |
| </code></pre></div> |
| </div> |
| <div class="tabbed-block"> |
| <div class="highlight"><pre><span></span><code><span class="n">Dataset</span><span class="o"><</span><span class="n">Row</span><span class="o">></span><span class="w"> </span><span class="n">df</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">sedona</span><span class="p">.</span><span class="na">read</span><span class="p">().</span><span class="na">format</span><span class="p">(</span><span class="s">"osmpbf"</span><span class="p">).</span><span class="na">load</span><span class="p">(</span><span class="s">"/path/to/osmpbf"</span><span class="p">)</span> |
| </code></pre></div> |
| </div> |
| <div class="tabbed-block"> |
| <div class="highlight"><pre><span></span><code><span class="n">df</span> <span class="o">=</span> <span class="n">sedona</span><span class="o">.</span><span class="n">read</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="s2">"osmpbf"</span><span class="p">)</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="s2">"/path/to/osmpbf"</span><span class="p">)</span> |
| </code></pre></div> |
| </div> |
| </div> |
| </div> |
| <p>OSM PBF files can contain nodes, ways, and relations. Currently Sedona support |
| Nodes, DenseNodes, Ways and Relations. When you load the data you get a DataFrame with the following schema.</p> |
| <div class="highlight"><pre><span></span><code>root |
| |-- id: long (nullable = true) |
| |-- kind: string (nullable = true) |
| |-- location: struct (nullable = true) |
| | |-- longitude: double (nullable = true) |
| | |-- latitude: double (nullable = true) |
| |-- tags: map (nullable = true) |
| | |-- key: string |
| | |-- value: string (valueContainsNull = true) |
| |-- refs: array (nullable = true) |
| | |-- element: long (containsNull = true) |
| |-- ref_roles: array (nullable = true) |
| | |-- element: string (containsNull = true) |
| |-- ref_types: array (nullable = true) |
| | |-- element: string (containsNull = true) |
| </code></pre></div> |
| <p>Where:</p> |
| <ul> |
| <li><code>id</code> is the unique identifier of the object.</li> |
| <li><code>kind</code> is the type of the object, it can be <code>node</code>, <code>way</code> or <code>relation</code>.</li> |
| <li><code>location</code> is the location of the object, it contains the <code>longitude</code> and <code>latitude</code> of the object.</li> |
| <li><code>tags</code> is a map of key-value pairs that represent the tags of the object.</li> |
| <li><code>refs</code> is an array of the references of the object.</li> |
| <li><code>ref_roles</code> is an array of the roles of the references.</li> |
| <li><code>ref_types</code> is an array of the types of the references.</li> |
| </ul> |
| <p>The dataframe for ways might look like this for nodes:</p> |
| <div class="highlight"><pre><span></span><code>+---------+----+--------------------+--------------------+----+---------+---------+ |
| | id|kind| location| tags|refs|ref_roles|ref_types| |
| +---------+----+--------------------+--------------------+----+---------+---------+ |
| |248675410|node|{21.0884952545166...|{tactile_paving -...|NULL| NULL| NULL| |
| |260821820|node|{21.0191555023193...|{created_by -> JOSM}|NULL| NULL| NULL| |
| |349189665|node|{22.1437530517578...|{source -> http:/...|NULL| NULL| NULL| |
| |353366899|node|{22.9787712097167...|{source -> http:/...|NULL| NULL| NULL| |
| |359460224|node|{22.4816703796386...|{source -> http:/...|NULL| NULL| NULL| |
| +---------+----+--------------------+--------------------+----+---------+---------+ |
| only showing top 5 rows |
| </code></pre></div> |
| <p>and for way</p> |
| <div class="highlight"><pre><span></span><code>+-------+----+--------+--------------------+--------------------+---------+---------+ |
| | id|kind|location| tags| refs|ref_roles|ref_types| |
| +-------+----+--------+--------------------+--------------------+---------+---------+ |
| |4307329| way| NULL|{junction -> roun...|[2448759046, 7093...| NULL| NULL| |
| |4307330| way| NULL|{surface -> aspha...|[26063923, 260639...| NULL| NULL| |
| |4308966| way| NULL|{sidewalk -> sepa...|[3387797238, 9252...| NULL| NULL| |
| |4308968| way| NULL|{surface -> pavin...|[26083890, 744724...| NULL| NULL| |
| |4308969| way| NULL|{cycleway:both ->...|[9526831176, 1218...| NULL| NULL| |
| +-------+----+--------+--------------------+--------------------+---------+---------+ |
| </code></pre></div> |
| <p>and for relation</p> |
| <div class="highlight"><pre><span></span><code>+-----+--------+--------+--------------------+--------------------+--------------------+--------------------+ |
| | id| kind|location| tags| refs| ref_roles| ref_types| |
| +-----+--------+--------+--------------------+--------------------+--------------------+--------------------+ |
| |28124|relation| NULL|{official_name ->...|[26382394, 26259985]| [inner, outer]| [WAY, WAY]| |
| |28488|relation| NULL| {type -> junction}|[26409253, 303249...|[roundabout, roun...|[WAY, WAY, WAY, WAY]| |
| |32939|relation| NULL|{ref -> E 67, rou...|[140673970, 14067...| [, , , , , ]|[WAY, WAY, RELATI...| |
| |34387|relation| NULL|{note -> rzΔ
d III...|[209161000, 52154...|[main_stream, mai...|[WAY, WAY, WAY, W...| |
| |34392|relation| NULL|{distance -> 1047...|[150033976, 25076...|[main_stream, mai...|[WAY, WAY, WAY, W...| |
| +-----+--------+--------+--------------------+--------------------+--------------------+--------------------+ |
| </code></pre></div> |
| <h2 id="transform-the-coordinate-reference-system">Transform the Coordinate Reference System<a class="headerlink" href="#transform-the-coordinate-reference-system" title="Permanent link">¶</a></h2> |
| <p>Sedona doesn't control the coordinate unit (degree-based or meter-based) of all geometries in a Geometry column. The unit of all related distances in SedonaSQL is same as the unit of all geometries in a Geometry column.</p> |
| <p>By default, this function uses lon/lat order since <code>v1.5.0</code>. Before, it used lat/lon order. You can use <mark>ST_FlipCoordinates</mark> to swap X and Y.</p> |
| <p>For more details, please read the <code>ST_Transform</code> section in Sedona API References.</p> |
| <p>To convert Coordinate Reference System of the Geometry column created before, use the following code:</p> |
| <div class="highlight"><pre><span></span><code><span class="k">SELECT</span><span class="w"> </span><span class="n">ST_Transform</span><span class="p">(</span><span class="n">countyshape</span><span class="p">,</span><span class="w"> </span><span class="ss">"epsg:4326"</span><span class="p">,</span><span class="w"> </span><span class="ss">"epsg:3857"</span><span class="p">)</span><span class="w"> </span><span class="k">AS</span><span class="w"> </span><span class="n">newcountyshape</span><span class="p">,</span><span class="w"> </span><span class="n">_c1</span><span class="p">,</span><span class="w"> </span><span class="n">_c2</span><span class="p">,</span><span class="w"> </span><span class="n">_c3</span><span class="p">,</span><span class="w"> </span><span class="n">_c4</span><span class="p">,</span><span class="w"> </span><span class="n">_c5</span><span class="p">,</span><span class="w"> </span><span class="n">_c6</span><span class="p">,</span><span class="w"> </span><span class="n">_c7</span> |
| <span class="k">FROM</span><span class="w"> </span><span class="n">spatialdf</span> |
| </code></pre></div> |
| <p>The first EPSG code EPSG:4326 in <code>ST_Transform</code> is the source CRS of the geometries. It is WGS84, the most common degree-based CRS.</p> |
| <p>The second EPSG code EPSG:3857 in <code>ST_Transform</code> is the target CRS of the geometries. It is the most common meter-based CRS.</p> |
| <p>This <code>ST_Transform</code> transform the CRS of these geometries from EPSG:4326 to EPSG:3857. The details CRS information can be found on <a href="https://epsg.io/">EPSG.io</a></p> |
| <p>The coordinates of polygons have been changed. The output will be like this:</p> |
| <div class="highlight"><pre><span></span><code>+--------------------+---+---+--------+-----+-----------+--------------------+---+ |
| | newcountyshape|_c1|_c2| _c3| _c4| _c5| _c6|_c7| |
| +--------------------+---+---+--------+-----+-----------+--------------------+---+ |
| |POLYGON ((-108001...| 31|039|00835841|31039| Cuming| Cuming County| 06| |
| |POLYGON ((-137408...| 53|069|01513275|53069| Wahkiakum| Wahkiakum County| 06| |
| |POLYGON ((-116403...| 35|011|00933054|35011| De Baca| De Baca County| 06| |
| |POLYGON ((-107880...| 31|109|00835876|31109| Lancaster| Lancaster County| 06| |
| </code></pre></div> |
| <h2 id="cluster-with-dbscan">Cluster with DBSCAN<a class="headerlink" href="#cluster-with-dbscan" title="Permanent link">¶</a></h2> |
| <p>Sedona provides an implementation of the <a href="https://en.wikipedia.org/wiki/Dbscan">DBSCAN</a> algorithm to cluster spatial data.</p> |
| <p>The algorithm is available as a Scala and Python function called on a spatial dataframe. The returned dataframe has an additional column added containing the unique identifier of the cluster that record is a member of and a boolean column indicating if the record is a core point.</p> |
| <p>The first parameter is the dataframe, the next two are the epsilon and min_points parameters of the DBSCAN algorithm.</p> |
| <div class="tabbed-set tabbed-alternate" data-tabs="12:3"><input checked="checked" id="__tabbed_12_1" name="__tabbed_12" type="radio" /><input id="__tabbed_12_2" name="__tabbed_12" type="radio" /><input id="__tabbed_12_3" name="__tabbed_12" type="radio" /><div class="tabbed-labels"><label for="__tabbed_12_1">Scala</label><label for="__tabbed_12_2">Java</label><label for="__tabbed_12_3">Python</label></div> |
| <div class="tabbed-content"> |
| <div class="tabbed-block"> |
| <div class="highlight"><pre><span></span><code><span class="k">import</span><span class="w"> </span><span class="nn">org</span><span class="p">.</span><span class="nn">apache</span><span class="p">.</span><span class="nn">sedona</span><span class="p">.</span><span class="nn">stats</span><span class="p">.</span><span class="nn">clustering</span><span class="p">.</span><span class="nc">DBSCAN</span><span class="p">.</span><span class="n">dbscan</span> |
| |
| <span class="n">dbscan</span><span class="p">(</span><span class="n">df</span><span class="p">,</span><span class="w"> </span><span class="mf">0.1</span><span class="p">,</span><span class="w"> </span><span class="mi">5</span><span class="p">).</span><span class="n">show</span><span class="p">()</span> |
| </code></pre></div> |
| </div> |
| <div class="tabbed-block"> |
| <div class="highlight"><pre><span></span><code><span class="kn">import</span><span class="w"> </span><span class="nn">org.apache.sedona.stats.clustering.DBSCAN</span><span class="p">;</span> |
| |
| <span class="n">DBSCAN</span><span class="p">.</span><span class="na">dbscan</span><span class="p">(</span><span class="n">df</span><span class="p">,</span><span class="w"> </span><span class="mf">0.1</span><span class="p">,</span><span class="w"> </span><span class="mi">5</span><span class="p">).</span><span class="na">show</span><span class="p">();</span> |
| </code></pre></div> |
| </div> |
| <div class="tabbed-block"> |
| <div class="highlight"><pre><span></span><code><span class="kn">from</span><span class="w"> </span><span class="nn">sedona.spark.stats</span><span class="w"> </span><span class="kn">import</span> <span class="n">dbscan</span> |
| |
| <span class="n">dbscan</span><span class="p">(</span><span class="n">df</span><span class="p">,</span> <span class="mf">0.1</span><span class="p">,</span> <span class="mi">5</span><span class="p">)</span><span class="o">.</span><span class="n">show</span><span class="p">()</span> |
| </code></pre></div> |
| </div> |
| </div> |
| </div> |
| <p>The output will look like this:</p> |
| <div class="highlight"><pre><span></span><code>+----------------+---+------+-------+ |
| | geometry| id|isCore|cluster| |
| +----------------+---+------+-------+ |
| | POINT (2.5 4)| 3| false| 1| |
| | POINT (3 4)| 2| false| 1| |
| | POINT (3 5)| 5| false| 1| |
| | POINT (1 3)| 9| true| 0| |
| | POINT (2.5 4.5)| 7| true| 1| |
| | POINT (1 2)| 1| true| 0| |
| | POINT (1.5 2.5)| 4| true| 0| |
| | POINT (1.2 2.5)| 8| true| 0| |
| | POINT (1 2.5)| 11| true| 0| |
| | POINT (1 5)| 10| false| -1| |
| | POINT (5 6)| 12| false| -1| |
| |POINT (12.8 4.5)| 6| false| -1| |
| | POINT (4 3)| 13| false| -1| |
| +----------------+---+------+-------+ |
| </code></pre></div> |
| <p>See <a href="../concepts/clustering-algorithms/">this page</a> for more information on the DBSCAN algorithm.</p> |
| <h2 id="calculate-the-local-outlier-factor-lof">Calculate the Local Outlier Factor (LOF)<a class="headerlink" href="#calculate-the-local-outlier-factor-lof" title="Permanent link">¶</a></h2> |
| <p>Sedona provides an implementation of the <a href="https://en.wikipedia.org/wiki/Local_outlier_factor">Local Outlier Factor</a> algorithm to identify anomalous data.</p> |
| <p>The algorithm is available as a Scala and Python function called on a spatial dataframe. The returned dataframe has an additional column added containing the local outlier factor.</p> |
| <p>The first parameter is the dataframe, the next is the number of nearest neighbors to consider use in calculating the score.</p> |
| <div class="tabbed-set tabbed-alternate" data-tabs="13:3"><input checked="checked" id="__tabbed_13_1" name="__tabbed_13" type="radio" /><input id="__tabbed_13_2" name="__tabbed_13" type="radio" /><input id="__tabbed_13_3" name="__tabbed_13" type="radio" /><div class="tabbed-labels"><label for="__tabbed_13_1">Scala</label><label for="__tabbed_13_2">Java</label><label for="__tabbed_13_3">Python</label></div> |
| <div class="tabbed-content"> |
| <div class="tabbed-block"> |
| <div class="highlight"><pre><span></span><code><span class="k">import</span><span class="w"> </span><span class="nn">org</span><span class="p">.</span><span class="nn">apache</span><span class="p">.</span><span class="nn">sedona</span><span class="p">.</span><span class="nn">stats</span><span class="p">.</span><span class="nn">outlierDetection</span><span class="p">.</span><span class="nc">LocalOutlierFactor</span><span class="p">.</span><span class="n">localOutlierFactor</span> |
| |
| <span class="n">localOutlierFactor</span><span class="p">(</span><span class="n">df</span><span class="p">,</span><span class="w"> </span><span class="mi">20</span><span class="p">).</span><span class="n">show</span><span class="p">()</span> |
| </code></pre></div> |
| </div> |
| <div class="tabbed-block"> |
| <div class="highlight"><pre><span></span><code><span class="kn">import</span><span class="w"> </span><span class="nn">org.apache.sedona.stats.outlierDetection.LocalOutlierFactor</span><span class="p">;</span> |
| |
| <span class="n">LocalOutlierFactor</span><span class="p">.</span><span class="na">localOutlierFactor</span><span class="p">(</span><span class="n">df</span><span class="p">,</span><span class="w"> </span><span class="mi">20</span><span class="p">).</span><span class="na">show</span><span class="p">();</span> |
| </code></pre></div> |
| </div> |
| <div class="tabbed-block"> |
| <div class="highlight"><pre><span></span><code><span class="kn">from</span><span class="w"> </span><span class="nn">sedona.spark.stats</span><span class="w"> </span><span class="kn">import</span> <span class="n">local_outlier_factor</span> |
| |
| <span class="n">local_outlier_factor</span><span class="p">(</span><span class="n">df</span><span class="p">,</span> <span class="mi">20</span><span class="p">)</span><span class="o">.</span><span class="n">show</span><span class="p">()</span> |
| </code></pre></div> |
| </div> |
| </div> |
| </div> |
| <p>The output will look like this:</p> |
| <div class="highlight"><pre><span></span><code>+--------------------+------------------+ |
| | geometry| lof| |
| +--------------------+------------------+ |
| |POINT (-2.0231305...| 0.952098153363662| |
| |POINT (-2.0346944...|0.9975325496668104| |
| |POINT (-2.2040074...|1.0825843906411081| |
| |POINT (1.61573501...|1.7367129352162634| |
| |POINT (-2.1176324...|1.5714144683150393| |
| |POINT (-2.2349759...|0.9167275845938276| |
| |POINT (1.65470192...| 1.046231536764447| |
| |POINT (0.62624112...|1.1988700676990034| |
| |POINT (2.01746261...|1.1060219481067417| |
| |POINT (-2.0483857...|1.0775553430145446| |
| |POINT (2.43969463...|1.1129132178576646| |
| |POINT (-2.2425480...| 1.104108012697006| |
| |POINT (-2.7859235...| 2.86371824574529| |
| |POINT (-1.9738858...|1.0398822680356794| |
| |POINT (2.00153403...| 0.927409656346015| |
| |POINT (2.06422812...|0.9222203762264445| |
| |POINT (-1.7533819...|1.0273650471626696| |
| |POINT (-2.2030766...| 0.964744555830738| |
| |POINT (-1.8509857...|1.0375927869698574| |
| |POINT (2.10849080...|1.0753419197322656| |
| +--------------------+------------------+ |
| </code></pre></div> |
| <h2 id="perform-getis-ord-gi-hot-spot-analysis">Perform Getis-Ord Gi(*) Hot Spot Analysis<a class="headerlink" href="#perform-getis-ord-gi-hot-spot-analysis" title="Permanent link">¶</a></h2> |
| <p>Sedona provides an implementation of the <a href="https://en.wikipedia.org/wiki/Getis%E2%80%93Ord_statistics">Gi and Gi*</a> algorithms to identify local hotspots in spatial data</p> |
| <p>The algorithm is available as a Scala and Python function called on a spatial dataframe. The returned dataframe has additional columns added containing G statistic, E[G], V[G], the Z score, and the p-value.</p> |
| <p>Using Gi involves first generating the neighbors list for each record, then calling the g_local function.</p> |
| <div class="tabbed-set tabbed-alternate" data-tabs="14:3"><input checked="checked" id="__tabbed_14_1" name="__tabbed_14" type="radio" /><input id="__tabbed_14_2" name="__tabbed_14" type="radio" /><input id="__tabbed_14_3" name="__tabbed_14" type="radio" /><div class="tabbed-labels"><label for="__tabbed_14_1">Scala</label><label for="__tabbed_14_2">Java</label><label for="__tabbed_14_3">Python</label></div> |
| <div class="tabbed-content"> |
| <div class="tabbed-block"> |
| <div class="highlight"><pre><span></span><code><span class="k">import</span><span class="w"> </span><span class="nn">org</span><span class="p">.</span><span class="nn">apache</span><span class="p">.</span><span class="nn">sedona</span><span class="p">.</span><span class="nn">stats</span><span class="p">.</span><span class="nc">Weighting</span><span class="p">.</span><span class="n">addBinaryDistanceBandColumn</span> |
| <span class="k">import</span><span class="w"> </span><span class="nn">org</span><span class="p">.</span><span class="nn">apache</span><span class="p">.</span><span class="nn">sedona</span><span class="p">.</span><span class="nn">stats</span><span class="p">.</span><span class="nn">hotspotDetection</span><span class="p">.</span><span class="nc">GetisOrd</span><span class="p">.</span><span class="n">gLocal</span> |
| |
| <span class="kd">val</span><span class="w"> </span><span class="n">distanceRadius</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mf">1.0</span> |
| <span class="kd">val</span><span class="w"> </span><span class="n">weightedDf</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">addBinaryDistanceBandColumn</span><span class="p">(</span><span class="n">df</span><span class="p">,</span><span class="w"> </span><span class="n">distanceRadius</span><span class="p">)</span> |
| <span class="n">gLocal</span><span class="p">(</span><span class="n">weightedDf</span><span class="p">,</span><span class="w"> </span><span class="s">"val"</span><span class="p">).</span><span class="n">show</span><span class="p">()</span> |
| </code></pre></div> |
| </div> |
| <div class="tabbed-block"> |
| <div class="highlight"><pre><span></span><code><span class="kn">import</span><span class="w"> </span><span class="nn">org.apache.sedona.stats.Weighting</span><span class="p">;</span> |
| <span class="kn">import</span><span class="w"> </span><span class="nn">org.apache.sedona.stats.hotspotDetection.GetisOrd</span><span class="p">;</span> |
| <span class="kn">import</span><span class="w"> </span><span class="nn">org.apache.spark.sql.DataFrame</span><span class="p">;</span> |
| |
| <span class="kt">double</span><span class="w"> </span><span class="n">distanceRadius</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mf">1.0</span><span class="p">;</span> |
| <span class="n">DataFrame</span><span class="w"> </span><span class="n">weightedDf</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">Weighting</span><span class="p">.</span><span class="na">addBinaryDistanceBandColumn</span><span class="p">(</span><span class="n">df</span><span class="p">,</span><span class="w"> </span><span class="n">distanceRadius</span><span class="p">);</span> |
| <span class="n">GetisOrd</span><span class="p">.</span><span class="na">gLocal</span><span class="p">(</span><span class="n">weightedDf</span><span class="p">,</span><span class="w"> </span><span class="s">"val"</span><span class="p">).</span><span class="na">show</span><span class="p">();</span> |
| </code></pre></div> |
| </div> |
| <div class="tabbed-block"> |
| <div class="highlight"><pre><span></span><code><span class="kn">from</span><span class="w"> </span><span class="nn">sedona.spark.stats</span><span class="w"> </span><span class="kn">import</span> <span class="n">add_binary_distance_band_column</span> |
| <span class="kn">from</span><span class="w"> </span><span class="nn">sedona.spark.stats</span><span class="w"> </span><span class="kn">import</span> <span class="n">g_local</span> |
| |
| <span class="n">distance_radius</span> <span class="o">=</span> <span class="mf">1.0</span> |
| <span class="n">weighted_df</span> <span class="o">=</span> <span class="n">addBinaryDistanceBandColumn</span><span class="p">(</span><span class="n">df</span><span class="p">,</span> <span class="n">distance_radius</span><span class="p">)</span> |
| <span class="n">g_local</span><span class="p">(</span><span class="n">weightedDf</span><span class="p">,</span> <span class="s2">"val"</span><span class="p">)</span><span class="o">.</span><span class="n">show</span><span class="p">()</span> |
| </code></pre></div> |
| </div> |
| </div> |
| </div> |
| <p>The output will look like this:</p> |
| <pre> |
| <code> |
| +-----------+---+--------------------+-------------------+-------------------+--------------------+--------------------+--------------------+ |
| | geometry|val| weights| G| EG| VG| Z| P| |
| +-----------+---+--------------------+-------------------+-------------------+--------------------+--------------------+--------------------+ |
| |POINT (2 2)|0.9|[{{POINT (2 3), 1...| 0.4488188976377953|0.45454545454545453| 0.00356321373799772|-0.09593402008347063| 0.4617864875295957| |
| |POINT (2 3)|1.2|[{{POINT (2 2), 0...|0.35433070866141736|0.36363636363636365|0.003325666155464539|-0.16136436037034918| 0.4359032175415549| |
| |POINT (3 3)|1.2|[{{POINT (2 3), 1...|0.28346456692913385| 0.2727272727272727|0.002850570990398176| 0.20110780337013057| 0.42030714022155924| |
| |POINT (3 2)|1.2|[{{POINT (2 2), 0...| 0.4488188976377953|0.45454545454545453| 0.00356321373799772|-0.09593402008347063| 0.4617864875295957| |
| |POINT (3 1)|1.2|[{{POINT (3 2), 3...| 0.3622047244094489| 0.2727272727272727|0.002850570990398176| 1.6758983614177538| 0.04687905137429871| |
| |POINT (2 1)|2.2|[{{POINT (2 2), 0...| 0.4330708661417323|0.36363636363636365|0.003325666155464539| 1.2040263812249166| 0.11428969105925013| |
| |POINT (1 1)|1.2|[{{POINT (2 1), 5...| 0.2834645669291339| 0.2727272727272727|0.002850570990398176| 0.2011078033701316| 0.4203071402215588| |
| |POINT (1 2)|0.2|[{{POINT (2 2), 0...|0.35433070866141736|0.45454545454545453| 0.00356321373799772| -1.67884535146075|0.046591093685710794| |
| |POINT (1 3)|1.2|[{{POINT (2 3), 1...| 0.2047244094488189| 0.2727272727272727|0.002850570990398176| -1.2736827546774914| 0.10138793530151635| |
| |POINT (0 2)|1.0|[{{POINT (1 2), 7...|0.09448818897637795|0.18181818181818182|0.002137928242798632| -1.8887168824332323|0.029464887612748458| |
| |POINT (4 2)|1.2|[{{POINT (3 2), 3...| 0.1889763779527559|0.18181818181818182|0.002137928242798632| 0.15481285921583854| 0.43848442662481324| |
| +-----------+---+--------------------+-------------------+-------------------+--------------------+--------------------+--------------------+ |
| </code> |
| </pre> |
| |
| <h2 id="run-spatial-queries">Run spatial queries<a class="headerlink" href="#run-spatial-queries" title="Permanent link">¶</a></h2> |
| <p>After creating a Geometry type column, you are able to run spatial queries.</p> |
| <h3 id="range-query">Range query<a class="headerlink" href="#range-query" title="Permanent link">¶</a></h3> |
| <p>Use <mark>ST_Contains</mark>, <mark>ST_Intersects</mark>, <mark>ST_Within</mark> to run a range query over a single column.</p> |
| <p>The following example finds all counties that are within the given polygon:</p> |
| <div class="highlight"><pre><span></span><code><span class="k">SELECT</span><span class="w"> </span><span class="o">*</span> |
| <span class="k">FROM</span><span class="w"> </span><span class="n">spatialdf</span> |
| <span class="k">WHERE</span><span class="w"> </span><span class="n">ST_Contains</span><span class="w"> </span><span class="p">(</span><span class="n">ST_PolygonFromEnvelope</span><span class="p">(</span><span class="mi">1</span><span class="p">.</span><span class="mi">0</span><span class="p">,</span><span class="mi">100</span><span class="p">.</span><span class="mi">0</span><span class="p">,</span><span class="mi">1000</span><span class="p">.</span><span class="mi">0</span><span class="p">,</span><span class="mi">1100</span><span class="p">.</span><span class="mi">0</span><span class="p">),</span><span class="w"> </span><span class="n">newcountyshape</span><span class="p">)</span> |
| </code></pre></div> |
| <div class="admonition note"> |
| <p class="admonition-title">Note</p> |
| <p>Read <a href="../../api/sql/Geometry-Functions/">SedonaSQL constructor API</a> to learn how to create a Geometry type query window</p> |
| </div> |
| <h3 id="knn-query">KNN query<a class="headerlink" href="#knn-query" title="Permanent link">¶</a></h3> |
| <p>Use <mark>ST_Distance</mark> to calculate the distance and rank the distance.</p> |
| <p>The following code returns the 5 nearest neighbor of the given polygon.</p> |
| <div class="highlight"><pre><span></span><code><span class="k">SELECT</span><span class="w"> </span><span class="n">countyname</span><span class="p">,</span><span class="w"> </span><span class="n">ST_Distance</span><span class="p">(</span><span class="n">ST_PolygonFromEnvelope</span><span class="p">(</span><span class="mi">1</span><span class="p">.</span><span class="mi">0</span><span class="p">,</span><span class="mi">100</span><span class="p">.</span><span class="mi">0</span><span class="p">,</span><span class="mi">1000</span><span class="p">.</span><span class="mi">0</span><span class="p">,</span><span class="mi">1100</span><span class="p">.</span><span class="mi">0</span><span class="p">),</span><span class="w"> </span><span class="n">newcountyshape</span><span class="p">)</span><span class="w"> </span><span class="k">AS</span><span class="w"> </span><span class="n">distance</span> |
| <span class="k">FROM</span><span class="w"> </span><span class="n">spatialdf</span> |
| <span class="k">ORDER</span><span class="w"> </span><span class="k">BY</span><span class="w"> </span><span class="n">distance</span><span class="w"> </span><span class="k">DESC</span> |
| <span class="k">LIMIT</span><span class="w"> </span><span class="mi">5</span> |
| </code></pre></div> |
| <h3 id="join-query">Join query<a class="headerlink" href="#join-query" title="Permanent link">¶</a></h3> |
| <p>The details of a join query is available here <a href="../../api/sql/Optimizer/">Join query</a>.</p> |
| <h3 id="knn-join-query">KNN join query<a class="headerlink" href="#knn-join-query" title="Permanent link">¶</a></h3> |
| <p>The details of a KNN join query is available here <a href="../../api/sql/NearestNeighbourSearching/">KNN join query</a>.</p> |
| <h3 id="other-queries">Other queries<a class="headerlink" href="#other-queries" title="Permanent link">¶</a></h3> |
| <p>There are lots of other functions can be combined with these queries. Please read <a href="../../api/sql/Overview/">SedonaSQL functions</a> and <a href="../../api/sql/Geometry-Functions/#aggregate-functions">SedonaSQL aggregate functions</a>.</p> |
| <h2 id="visualize-query-results">Visualize query results<a class="headerlink" href="#visualize-query-results" title="Permanent link">¶</a></h2> |
| <p>Sedona provides <code>SedonaPyDeck</code> and <code>SedonaKepler</code> wrappers, both of which expose APIs to create interactive map visualizations from SedonaDataFrames in a Jupyter environment.</p> |
| <div class="admonition note"> |
| <p class="admonition-title">Note</p> |
| <p>Both SedonaPyDeck and SedonaKepler expect the default geometry order to be lon-lat. If your dataframe has geometries in the lat-lon order, please check out <a href="../../api/sql/Geometry-Editors/ST_FlipCoordinates/">ST_FlipCoordinates</a></p> |
| </div> |
| <div class="admonition note"> |
| <p class="admonition-title">Note</p> |
| <p>Both SedonaPyDeck and SedonaKepler are designed to work with SedonaDataFrames containing only 1 geometry column. Passing dataframes with multiple geometry columns will cause errors.</p> |
| </div> |
| <h3 id="sedonapydeck">SedonaPyDeck<a class="headerlink" href="#sedonapydeck" title="Permanent link">¶</a></h3> |
| <p>Spatial query results can be visualized in a Jupyter lab/notebook environment using SedonaPyDeck.</p> |
| <p>SedonaPyDeck exposes APIs to create interactive map visualizations using <a href="https://deckgl.readthedocs.io">pydeck</a> based on <a href="https://deck.gl/">deck.gl</a></p> |
| <div class="admonition note"> |
| <p class="admonition-title">Note</p> |
| <p>To use SedonaPyDeck, install sedona with the <code>pydeck-map</code> extra: |
| <div class="highlight"><pre><span></span><code>pip install apache-sedona[pydeck-map] |
| </code></pre></div></p> |
| </div> |
| <p>The following tutorial showcases the various maps that can be created using SedonaPyDeck, the datasets used to create these maps are publicly available.</p> |
| <p>Each API exposed by SedonaPyDeck offers customization via optional arguments, details on all possible arguments can be found in the <a href="../../api/sql/Visualization-SedonaPyDeck/">API docs of SedonaPyDeck</a>.</p> |
| <h4 id="creating-a-choropleth-map-using-sedonapydeck">Creating a Choropleth map using SedonaPyDeck<a class="headerlink" href="#creating-a-choropleth-map-using-sedonapydeck" title="Permanent link">¶</a></h4> |
| <p>SedonaPyDeck exposes a <code>create_choropleth_map</code> API which can be used to visualize a choropleth map out of the passed SedonaDataFrame containing polygons with an observation:</p> |
| <p>Example:</p> |
| <div class="highlight"><pre><span></span><code><span class="n">SedonaPyDeck</span><span class="o">.</span><span class="n">create_choropleth_map</span><span class="p">(</span><span class="n">df</span><span class="o">=</span><span class="n">groupedresult</span><span class="p">,</span> <span class="n">plot_col</span><span class="o">=</span><span class="s2">"AirportCount"</span><span class="p">)</span> |
| </code></pre></div> |
| <div class="admonition note"> |
| <p class="admonition-title">Note</p> |
| <p><code>plot_col</code> is a required argument informing SedonaPyDeck of the column name used to render the choropleth effect.</p> |
| </div> |
| <p><img alt="Creating a Choropleth map using SedonaPyDeck" src="../../image/choropleth.gif" /></p> |
| <p>The dataset used is available <a href="https://github.com/apache/sedona/tree/b66e768155866a38ba2e3404f1151cac14fad5ea/docs/usecases/data/ne_50m_airports">here</a> and |
| can also be found in the example notebook available <a href="https://github.com/apache/sedona/blob/master/docs/usecases/legacy/ApacheSedonaSQL_SpatialJoin_AirportsPerCountry.ipynb">here</a></p> |
| <h4 id="creating-a-geometry-map-using-sedonapydeck">Creating a Geometry map using SedonaPyDeck<a class="headerlink" href="#creating-a-geometry-map-using-sedonapydeck" title="Permanent link">¶</a></h4> |
| <p>SedonaPyDeck exposes a create_geometry_map API which can be used to visualize a passed SedonaDataFrame containing any type of geometries:</p> |
| <p>Example:</p> |
| <div class="highlight"><pre><span></span><code><span class="n">SedonaPyDeck</span><span class="o">.</span><span class="n">create_geometry_map</span><span class="p">(</span><span class="n">df_building</span><span class="p">,</span> <span class="n">elevation_col</span><span class="o">=</span><span class="s2">"height"</span><span class="p">)</span> |
| </code></pre></div> |
| <p><img alt="Creating a Geometry map using SedonaPyDeck" src="../../image/buildings.gif" /></p> |
| <div class="admonition tip"> |
| <p class="admonition-title">Tip</p> |
| <p><code>elevation_col</code> is an optional argument which can be used to render a 3D map. Pass the column with 'elevation' values for the geometries here.</p> |
| </div> |
| <h4 id="creating-a-scatterplot-map-using-sedonapydeck">Creating a Scatterplot map using SedonaPyDeck<a class="headerlink" href="#creating-a-scatterplot-map-using-sedonapydeck" title="Permanent link">¶</a></h4> |
| <p>SedonaPyDeck exposes a create_scatterplot_map API which can be used to visualize a scatterplot out of the passed SedonaDataFrame containing points:</p> |
| <p>Example:</p> |
| <div class="highlight"><pre><span></span><code><span class="n">SedonaPyDeck</span><span class="o">.</span><span class="n">create_scatterplot_map</span><span class="p">(</span><span class="n">df</span><span class="o">=</span><span class="n">crimes_df</span><span class="p">)</span> |
| </code></pre></div> |
| <p><img alt="Creating a Scatterplot map using SedonaPyDeck" src="../../image/points.gif" /></p> |
| <p>The dataset used here is the Chicago crimes dataset, available <a href="https://github.com/apache/sedona/blob/sedona-1.5.0/spark/common/src/test/resources/Chicago_Crimes.csv">here</a></p> |
| <h4 id="creating-a-heatmap-using-sedonapydeck">Creating a heatmap using SedonaPyDeck<a class="headerlink" href="#creating-a-heatmap-using-sedonapydeck" title="Permanent link">¶</a></h4> |
| <p>SedonaPyDeck exposes a create_heatmap API which can be used to visualize a heatmap out of the passed SedonaDataFrame containing points:</p> |
| <p>Example:</p> |
| <div class="highlight"><pre><span></span><code><span class="n">SedonaPyDeck</span><span class="o">.</span><span class="n">create_heatmap</span><span class="p">(</span><span class="n">df</span><span class="o">=</span><span class="n">crimes_df</span><span class="p">)</span> |
| </code></pre></div> |
| <p><img alt="Creating a heatmap using SedonaPyDeck" src="../../image/heatmap.gif" /></p> |
| <p>The dataset used here is the Chicago crimes dataset, available <a href="https://github.com/apache/sedona/blob/sedona-1.5.0/spark/common/src/test/resources/Chicago_Crimes.csv">here</a></p> |
| <h3 id="sedonakepler">SedonaKepler<a class="headerlink" href="#sedonakepler" title="Permanent link">¶</a></h3> |
| <p>Spatial query results can be visualized in a Jupyter lab/notebook environment using SedonaKepler.</p> |
| <p>SedonaKepler exposes APIs to create interactive and customizable map visualizations using <a href="https://kepler.gl/">KeplerGl</a>.</p> |
| <div class="admonition note"> |
| <p class="admonition-title">Note</p> |
| <p>To use SedonaKepler, install sedona with the <code>kepler-map</code> extra: |
| <div class="highlight"><pre><span></span><code>pip install apache-sedona[kepler-map] |
| </code></pre></div></p> |
| </div> |
| <p>This tutorial showcases how simple it is to instantly visualize geospatial data using SedonaKepler.</p> |
| <p>Example (referenced from an example notebook via the binder):</p> |
| <div class="highlight"><pre><span></span><code><span class="n">SedonaKepler</span><span class="o">.</span><span class="n">create_map</span><span class="p">(</span><span class="n">df</span><span class="o">=</span><span class="n">groupedresult</span><span class="p">,</span> <span class="n">name</span><span class="o">=</span><span class="s2">"AirportCount"</span><span class="p">)</span> |
| </code></pre></div> |
| <p><img alt="Visualize geospatial data using SedonaKepler" src="../../image/sedona_customization.gif" /></p> |
| <p>The dataset used is available <a href="https://github.com/apache/sedona/tree/b66e768155866a38ba2e3404f1151cac14fad5ea/docs/usecases/data/ne_50m_airports">here</a> and |
| can also be found in the example notebook available <a href="https://github.com/apache/sedona/blob/master/docs/usecases/legacy/ApacheSedonaSQL_SpatialJoin_AirportsPerCountry.ipynb">here</a></p> |
| <p>Details on all the APIs available by SedonaKepler are listed in the <a href="../../api/sql/Visualization-SedonaKepler/">SedonaKepler API docs</a></p> |
| <h2 id="create-a-user-defined-function-udf">Create a User-Defined Function (UDF)<a class="headerlink" href="#create-a-user-defined-function-udf" title="Permanent link">¶</a></h2> |
| <p>User-Defined Functions (UDFs) are user-created procedures that can perform operations on a single row of information. To cover almost all use cases, we will showcase 4 types of UDFs for a better understanding of how to use geometry with UDFs. Sedona's serializer deserializes the SQL geometry type to <a href="https://locationtech.github.io/jts/javadoc-1.18.0/org/locationtech/jts/geom/Geometry.html">JTS Geometry</a> (Scala/Java) or <a href="https://shapely.readthedocs.io/en/stable/geometry.html">Shapely Geometry</a> (Python). You can implement any custom logic using the rich ecosystem around these two libraries.</p> |
| <h3 id="geometry-to-primitive">Geometry to primitive<a class="headerlink" href="#geometry-to-primitive" title="Permanent link">¶</a></h3> |
| <p>This UDF example takes a geometry type input and returns a primitive type output:</p> |
| <div class="tabbed-set tabbed-alternate" data-tabs="15:3"><input checked="checked" id="__tabbed_15_1" name="__tabbed_15" type="radio" /><input id="__tabbed_15_2" name="__tabbed_15" type="radio" /><input id="__tabbed_15_3" name="__tabbed_15" type="radio" /><div class="tabbed-labels"><label for="__tabbed_15_1">Scala</label><label for="__tabbed_15_2">Java</label><label for="__tabbed_15_3">Python</label></div> |
| <div class="tabbed-content"> |
| <div class="tabbed-block"> |
| <div class="highlight"><pre><span></span><code><span class="k">import</span><span class="w"> </span><span class="nn">org</span><span class="p">.</span><span class="nn">locationtech</span><span class="p">.</span><span class="nn">jts</span><span class="p">.</span><span class="nn">geom</span><span class="p">.</span><span class="nc">Geometry</span> |
| <span class="k">import</span><span class="w"> </span><span class="nn">org</span><span class="p">.</span><span class="nn">apache</span><span class="p">.</span><span class="nn">spark</span><span class="p">.</span><span class="nn">sql</span><span class="p">.</span><span class="nn">types</span><span class="p">.</span><span class="n">_</span> |
| |
| <span class="k">def</span><span class="w"> </span><span class="nf">lengthPoly</span><span class="p">(</span><span class="n">geom</span><span class="p">:</span><span class="w"> </span><span class="nc">Geometry</span><span class="p">):</span><span class="w"> </span><span class="nc">Double</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span> |
| <span class="w"> </span><span class="n">geom</span><span class="p">.</span><span class="n">getLength</span> |
| <span class="p">}</span> |
| |
| <span class="n">sedona</span><span class="p">.</span><span class="n">udf</span><span class="p">.</span><span class="n">register</span><span class="p">(</span><span class="s">"udf_lengthPoly"</span><span class="p">,</span><span class="w"> </span><span class="n">lengthPoly</span><span class="w"> </span><span class="n">_</span><span class="p">)</span> |
| |
| <span class="n">df</span><span class="p">.</span><span class="n">selectExpr</span><span class="p">(</span><span class="s">"udf_lengthPoly(geom)"</span><span class="p">).</span><span class="n">show</span><span class="p">()</span> |
| </code></pre></div> |
| </div> |
| <div class="tabbed-block"> |
| <div class="highlight"><pre><span></span><code><span class="kn">import</span><span class="w"> </span><span class="nn">org.apache.spark.sql.api.java.UDF1</span><span class="p">;</span> |
| <span class="kn">import</span><span class="w"> </span><span class="nn">org.apache.spark.sql.types.DataTypes</span><span class="p">;</span> |
| |
| <span class="c1">// using lambda function to register the UDF</span> |
| <span class="n">sparkSession</span><span class="p">.</span><span class="na">udf</span><span class="p">().</span><span class="na">register</span><span class="p">(</span> |
| <span class="w"> </span><span class="s">"udf_lengthPoly"</span><span class="p">,</span> |
| <span class="w"> </span><span class="p">(</span><span class="n">UDF1</span><span class="o"><</span><span class="n">Geometry</span><span class="p">,</span><span class="w"> </span><span class="n">Double</span><span class="o">></span><span class="p">)</span><span class="w"> </span><span class="n">Geometry</span><span class="p">::</span><span class="n">getLength</span><span class="p">,</span> |
| <span class="w"> </span><span class="n">DataTypes</span><span class="p">.</span><span class="na">DoubleType</span><span class="p">);</span> |
| |
| <span class="n">df</span><span class="p">.</span><span class="na">selectExpr</span><span class="p">(</span><span class="s">"udf_lengthPoly(geom)"</span><span class="p">).</span><span class="na">show</span><span class="p">()</span> |
| </code></pre></div> |
| </div> |
| <div class="tabbed-block"> |
| <div class="highlight"><pre><span></span><code><span class="kn">from</span><span class="w"> </span><span class="nn">sedona.spark.sql.types</span><span class="w"> </span><span class="kn">import</span> <span class="n">GeometryType</span> |
| <span class="kn">from</span><span class="w"> </span><span class="nn">pyspark.sql.types</span><span class="w"> </span><span class="kn">import</span> <span class="n">DoubleType</span> |
| |
| <span class="k">def</span><span class="w"> </span><span class="nf">lengthPoly</span><span class="p">(</span><span class="n">geom</span><span class="p">:</span> <span class="n">GeometryType</span><span class="p">()):</span> |
| <span class="k">return</span> <span class="n">geom</span><span class="o">.</span><span class="n">length</span> |
| |
| <span class="n">sedona</span><span class="o">.</span><span class="n">udf</span><span class="o">.</span><span class="n">register</span><span class="p">(</span><span class="s2">"udf_lengthPoly"</span><span class="p">,</span> <span class="n">lengthPoly</span><span class="p">,</span> <span class="n">DoubleType</span><span class="p">())</span> |
| |
| <span class="n">df</span><span class="o">.</span><span class="n">selectExpr</span><span class="p">(</span><span class="s2">"udf_lengthPoly(geom)"</span><span class="p">)</span><span class="o">.</span><span class="n">show</span><span class="p">()</span> |
| </code></pre></div> |
| </div> |
| </div> |
| </div> |
| <p>Output:</p> |
| <div class="highlight"><pre><span></span><code>+--------------------+ |
| |udf_lengthPoly(geom)| |
| +--------------------+ |
| | 3.414213562373095| |
| +--------------------+ |
| </code></pre></div> |
| <h3 id="geometry-to-geometry">Geometry to Geometry<a class="headerlink" href="#geometry-to-geometry" title="Permanent link">¶</a></h3> |
| <p>This UDF example takes a geometry type input and returns a geometry type output:</p> |
| <div class="tabbed-set tabbed-alternate" data-tabs="16:3"><input checked="checked" id="__tabbed_16_1" name="__tabbed_16" type="radio" /><input id="__tabbed_16_2" name="__tabbed_16" type="radio" /><input id="__tabbed_16_3" name="__tabbed_16" type="radio" /><div class="tabbed-labels"><label for="__tabbed_16_1">Scala</label><label for="__tabbed_16_2">Java</label><label for="__tabbed_16_3">Python</label></div> |
| <div class="tabbed-content"> |
| <div class="tabbed-block"> |
| <div class="highlight"><pre><span></span><code><span class="k">import</span><span class="w"> </span><span class="nn">org</span><span class="p">.</span><span class="nn">locationtech</span><span class="p">.</span><span class="nn">jts</span><span class="p">.</span><span class="nn">geom</span><span class="p">.</span><span class="nc">Geometry</span> |
| <span class="k">import</span><span class="w"> </span><span class="nn">org</span><span class="p">.</span><span class="nn">apache</span><span class="p">.</span><span class="nn">spark</span><span class="p">.</span><span class="nn">sql</span><span class="p">.</span><span class="nn">types</span><span class="p">.</span><span class="n">_</span> |
| |
| <span class="k">def</span><span class="w"> </span><span class="nf">bufferFixed</span><span class="p">(</span><span class="n">geom</span><span class="p">:</span><span class="w"> </span><span class="nc">Geometry</span><span class="p">):</span><span class="w"> </span><span class="nc">Geometry</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span> |
| <span class="w"> </span><span class="n">geom</span><span class="p">.</span><span class="n">buffer</span><span class="p">(</span><span class="mf">5.5</span><span class="p">)</span> |
| <span class="p">}</span> |
| |
| <span class="n">sedona</span><span class="p">.</span><span class="n">udf</span><span class="p">.</span><span class="n">register</span><span class="p">(</span><span class="s">"udf_bufferFixed"</span><span class="p">,</span><span class="w"> </span><span class="n">bufferFixed</span><span class="w"> </span><span class="n">_</span><span class="p">)</span> |
| |
| <span class="n">df</span><span class="p">.</span><span class="n">selectExpr</span><span class="p">(</span><span class="s">"udf_bufferFixed(geom)"</span><span class="p">).</span><span class="n">show</span><span class="p">()</span> |
| </code></pre></div> |
| </div> |
| <div class="tabbed-block"> |
| <div class="highlight"><pre><span></span><code><span class="kn">import</span><span class="w"> </span><span class="nn">org.apache.spark.sql.api.java.UDF1</span><span class="p">;</span> |
| <span class="kn">import</span><span class="w"> </span><span class="nn">org.apache.spark.sql.types.DataTypes</span><span class="p">;</span> |
| |
| <span class="c1">// using lambda function to register the UDF</span> |
| <span class="n">sparkSession</span><span class="p">.</span><span class="na">udf</span><span class="p">().</span><span class="na">register</span><span class="p">(</span> |
| <span class="w"> </span><span class="s">"udf_bufferFixed"</span><span class="p">,</span> |
| <span class="w"> </span><span class="p">(</span><span class="n">UDF1</span><span class="o"><</span><span class="n">Geometry</span><span class="p">,</span><span class="w"> </span><span class="n">Geometry</span><span class="o">></span><span class="p">)</span><span class="w"> </span><span class="n">geom</span><span class="w"> </span><span class="o">-></span> |
| <span class="w"> </span><span class="n">geom</span><span class="p">.</span><span class="na">buffer</span><span class="p">(</span><span class="mf">5.5</span><span class="p">),</span> |
| <span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">GeometryUDT</span><span class="p">());</span> |
| |
| <span class="n">df</span><span class="p">.</span><span class="na">selectExpr</span><span class="p">(</span><span class="s">"udf_bufferFixed(geom)"</span><span class="p">).</span><span class="na">show</span><span class="p">()</span> |
| </code></pre></div> |
| </div> |
| <div class="tabbed-block"> |
| <div class="highlight"><pre><span></span><code><span class="kn">from</span><span class="w"> </span><span class="nn">sedona.spark</span><span class="w"> </span><span class="kn">import</span> <span class="n">GeometryType</span> |
| <span class="kn">from</span><span class="w"> </span><span class="nn">pyspark.sql.types</span><span class="w"> </span><span class="kn">import</span> <span class="n">DoubleType</span> |
| |
| <span class="k">def</span><span class="w"> </span><span class="nf">bufferFixed</span><span class="p">(</span><span class="n">geom</span><span class="p">:</span> <span class="n">GeometryType</span><span class="p">()):</span> |
| <span class="k">return</span> <span class="n">geom</span><span class="o">.</span><span class="n">buffer</span><span class="p">(</span><span class="mf">5.5</span><span class="p">)</span> |
| |
| <span class="n">sedona</span><span class="o">.</span><span class="n">udf</span><span class="o">.</span><span class="n">register</span><span class="p">(</span><span class="s2">"udf_bufferFixed"</span><span class="p">,</span> <span class="n">bufferFixed</span><span class="p">,</span> <span class="n">GeometryType</span><span class="p">())</span> |
| |
| <span class="n">df</span><span class="o">.</span><span class="n">selectExpr</span><span class="p">(</span><span class="s2">"udf_bufferFixed(geom)"</span><span class="p">)</span><span class="o">.</span><span class="n">show</span><span class="p">()</span> |
| </code></pre></div> |
| </div> |
| </div> |
| </div> |
| <p>Output:</p> |
| <div class="highlight"><pre><span></span><code>+--------------------------------------------------+ |
| | udf_bufferFixed(geom)| |
| +--------------------------------------------------+ |
| |POLYGON ((1 -4.5, -0.0729967710887076 -4.394319...| |
| +--------------------------------------------------+ |
| </code></pre></div> |
| <h3 id="geometry-primitive-to-geometry">Geometry, primitive to geometry<a class="headerlink" href="#geometry-primitive-to-geometry" title="Permanent link">¶</a></h3> |
| <p>This UDF example takes a geometry type input and a primitive type input and returns a geometry type output:</p> |
| <div class="tabbed-set tabbed-alternate" data-tabs="17:3"><input checked="checked" id="__tabbed_17_1" name="__tabbed_17" type="radio" /><input id="__tabbed_17_2" name="__tabbed_17" type="radio" /><input id="__tabbed_17_3" name="__tabbed_17" type="radio" /><div class="tabbed-labels"><label for="__tabbed_17_1">Scala</label><label for="__tabbed_17_2">Java</label><label for="__tabbed_17_3">Python</label></div> |
| <div class="tabbed-content"> |
| <div class="tabbed-block"> |
| <div class="highlight"><pre><span></span><code><span class="k">import</span><span class="w"> </span><span class="nn">org</span><span class="p">.</span><span class="nn">locationtech</span><span class="p">.</span><span class="nn">jts</span><span class="p">.</span><span class="nn">geom</span><span class="p">.</span><span class="nc">Geometry</span> |
| <span class="k">import</span><span class="w"> </span><span class="nn">org</span><span class="p">.</span><span class="nn">apache</span><span class="p">.</span><span class="nn">spark</span><span class="p">.</span><span class="nn">sql</span><span class="p">.</span><span class="nn">types</span><span class="p">.</span><span class="n">_</span> |
| |
| <span class="k">def</span><span class="w"> </span><span class="nf">bufferIt</span><span class="p">(</span><span class="n">geom</span><span class="p">:</span><span class="w"> </span><span class="nc">Geometry</span><span class="p">,</span><span class="w"> </span><span class="n">distance</span><span class="p">:</span><span class="w"> </span><span class="nc">Double</span><span class="p">):</span><span class="w"> </span><span class="nc">Geometry</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span> |
| <span class="w"> </span><span class="n">geom</span><span class="p">.</span><span class="n">buffer</span><span class="p">(</span><span class="n">distance</span><span class="p">)</span> |
| <span class="p">}</span> |
| |
| <span class="n">sedona</span><span class="p">.</span><span class="n">udf</span><span class="p">.</span><span class="n">register</span><span class="p">(</span><span class="s">"udf_buffer"</span><span class="p">,</span><span class="w"> </span><span class="n">bufferIt</span><span class="w"> </span><span class="n">_</span><span class="p">)</span> |
| |
| <span class="n">df</span><span class="p">.</span><span class="n">selectExpr</span><span class="p">(</span><span class="s">"udf_buffer(geom, distance)"</span><span class="p">).</span><span class="n">show</span><span class="p">()</span> |
| </code></pre></div> |
| </div> |
| <div class="tabbed-block"> |
| <div class="highlight"><pre><span></span><code><span class="kn">import</span><span class="w"> </span><span class="nn">org.apache.spark.sql.api.java.UDF2</span><span class="p">;</span> |
| <span class="kn">import</span><span class="w"> </span><span class="nn">org.apache.spark.sql.types.DataTypes</span><span class="p">;</span> |
| |
| <span class="c1">// using lambda function to register the UDF</span> |
| <span class="n">sparkSession</span><span class="p">.</span><span class="na">udf</span><span class="p">().</span><span class="na">register</span><span class="p">(</span> |
| <span class="w"> </span><span class="s">"udf_buffer"</span><span class="p">,</span> |
| <span class="w"> </span><span class="p">(</span><span class="n">UDF2</span><span class="o"><</span><span class="n">Geometry</span><span class="p">,</span><span class="w"> </span><span class="n">Double</span><span class="p">,</span><span class="w"> </span><span class="n">Geometry</span><span class="o">></span><span class="p">)</span><span class="w"> </span><span class="n">Geometry</span><span class="p">::</span><span class="n">buffer</span><span class="p">,</span> |
| <span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">GeometryUDT</span><span class="p">());</span> |
| |
| <span class="n">df</span><span class="p">.</span><span class="na">selectExpr</span><span class="p">(</span><span class="s">"udf_buffer(geom, distance)"</span><span class="p">).</span><span class="na">show</span><span class="p">()</span> |
| </code></pre></div> |
| </div> |
| <div class="tabbed-block"> |
| <div class="highlight"><pre><span></span><code><span class="kn">from</span><span class="w"> </span><span class="nn">sedona.spark</span><span class="w"> </span><span class="kn">import</span> <span class="n">GeometryType</span> |
| <span class="kn">from</span><span class="w"> </span><span class="nn">pyspark.sql.types</span><span class="w"> </span><span class="kn">import</span> <span class="n">DoubleType</span> |
| |
| <span class="k">def</span><span class="w"> </span><span class="nf">bufferIt</span><span class="p">(</span><span class="n">geom</span><span class="p">:</span> <span class="n">GeometryType</span><span class="p">(),</span> <span class="n">distance</span><span class="p">:</span> <span class="n">DoubleType</span><span class="p">()):</span> |
| <span class="k">return</span> <span class="n">geom</span><span class="o">.</span><span class="n">buffer</span><span class="p">(</span><span class="n">distance</span><span class="p">)</span> |
| |
| <span class="n">sedona</span><span class="o">.</span><span class="n">udf</span><span class="o">.</span><span class="n">register</span><span class="p">(</span><span class="s2">"udf_buffer"</span><span class="p">,</span> <span class="n">bufferIt</span><span class="p">,</span> <span class="n">GeometryType</span><span class="p">())</span> |
| |
| <span class="n">df</span><span class="o">.</span><span class="n">selectExpr</span><span class="p">(</span><span class="s2">"udf_buffer(geom, distance)"</span><span class="p">)</span><span class="o">.</span><span class="n">show</span><span class="p">()</span> |
| </code></pre></div> |
| </div> |
| </div> |
| </div> |
| <p>Output:</p> |
| <div class="highlight"><pre><span></span><code>+--------------------------------------------------+ |
| | udf_buffer(geom, distance)| |
| +--------------------------------------------------+ |
| |POLYGON ((1 -9, -0.9509032201612866 -8.80785280...| |
| +--------------------------------------------------+ |
| </code></pre></div> |
| <h3 id="geometry-primitive-to-geometry-primitive">Geometry, primitive to Geometry, primitive<a class="headerlink" href="#geometry-primitive-to-geometry-primitive" title="Permanent link">¶</a></h3> |
| <p>This UDF example takes a geometry type input and a primitive type input and returns a geometry type and a primitive type output:</p> |
| <div class="tabbed-set tabbed-alternate" data-tabs="18:3"><input checked="checked" id="__tabbed_18_1" name="__tabbed_18" type="radio" /><input id="__tabbed_18_2" name="__tabbed_18" type="radio" /><input id="__tabbed_18_3" name="__tabbed_18" type="radio" /><div class="tabbed-labels"><label for="__tabbed_18_1">Scala</label><label for="__tabbed_18_2">Java</label><label for="__tabbed_18_3">Python</label></div> |
| <div class="tabbed-content"> |
| <div class="tabbed-block"> |
| <div class="highlight"><pre><span></span><code><span class="k">import</span><span class="w"> </span><span class="nn">org</span><span class="p">.</span><span class="nn">locationtech</span><span class="p">.</span><span class="nn">jts</span><span class="p">.</span><span class="nn">geom</span><span class="p">.</span><span class="nc">Geometry</span> |
| <span class="k">import</span><span class="w"> </span><span class="nn">org</span><span class="p">.</span><span class="nn">apache</span><span class="p">.</span><span class="nn">spark</span><span class="p">.</span><span class="nn">sql</span><span class="p">.</span><span class="nn">types</span><span class="p">.</span><span class="n">_</span> |
| <span class="k">import</span><span class="w"> </span><span class="nn">org</span><span class="p">.</span><span class="nn">apache</span><span class="p">.</span><span class="nn">spark</span><span class="p">.</span><span class="nn">sql</span><span class="p">.</span><span class="nn">api</span><span class="p">.</span><span class="nn">java</span><span class="p">.</span><span class="nc">UDF2</span> |
| |
| <span class="kd">val</span><span class="w"> </span><span class="n">schemaUDF</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nc">StructType</span><span class="p">(</span><span class="nc">Array</span><span class="p">(</span> |
| <span class="w"> </span><span class="nc">StructField</span><span class="p">(</span><span class="s">"buffed"</span><span class="p">,</span><span class="w"> </span><span class="nc">GeometryUDT</span><span class="p">),</span> |
| <span class="w"> </span><span class="nc">StructField</span><span class="p">(</span><span class="s">"length"</span><span class="p">,</span><span class="w"> </span><span class="nc">DoubleType</span><span class="p">)</span> |
| <span class="p">))</span> |
| |
| <span class="kd">val</span><span class="w"> </span><span class="n">udf_bufferLength</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">udf</span><span class="p">(</span> |
| <span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="nc">UDF2</span><span class="p">[</span><span class="nc">Geometry</span><span class="p">,</span><span class="w"> </span><span class="nc">Double</span><span class="p">,</span><span class="w"> </span><span class="p">(</span><span class="nc">Geometry</span><span class="p">,</span><span class="w"> </span><span class="nc">Double</span><span class="p">)]</span><span class="w"> </span><span class="p">{</span> |
| <span class="w"> </span><span class="k">def</span><span class="w"> </span><span class="nf">call</span><span class="p">(</span><span class="n">geom</span><span class="p">:</span><span class="w"> </span><span class="nc">Geometry</span><span class="p">,</span><span class="w"> </span><span class="n">distance</span><span class="p">:</span><span class="w"> </span><span class="nc">Double</span><span class="p">):</span><span class="w"> </span><span class="p">(</span><span class="nc">Geometry</span><span class="p">,</span><span class="w"> </span><span class="nc">Double</span><span class="p">)</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span> |
| <span class="w"> </span><span class="kd">val</span><span class="w"> </span><span class="n">buffed</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">geom</span><span class="p">.</span><span class="n">buffer</span><span class="p">(</span><span class="n">distance</span><span class="p">)</span> |
| <span class="w"> </span><span class="kd">val</span><span class="w"> </span><span class="n">length</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">geom</span><span class="p">.</span><span class="n">getLength</span> |
| <span class="w"> </span><span class="p">(</span><span class="n">buffed</span><span class="p">,</span><span class="w"> </span><span class="n">length</span><span class="p">)</span> |
| <span class="w"> </span><span class="p">}</span> |
| <span class="w"> </span><span class="p">},</span><span class="w"> </span><span class="n">schemaUDF</span><span class="p">)</span> |
| |
| <span class="n">sedona</span><span class="p">.</span><span class="n">udf</span><span class="p">.</span><span class="n">register</span><span class="p">(</span><span class="s">"udf_bufferLength"</span><span class="p">,</span><span class="w"> </span><span class="n">udf_bufferLength</span><span class="p">)</span> |
| |
| <span class="n">data</span><span class="p">.</span><span class="n">withColumn</span><span class="p">(</span><span class="s">"bufferLength"</span><span class="p">,</span><span class="w"> </span><span class="n">expr</span><span class="p">(</span><span class="s">"udf_bufferLengths(geom, distance)"</span><span class="p">))</span> |
| <span class="w"> </span><span class="p">.</span><span class="n">select</span><span class="p">(</span><span class="s">"geom"</span><span class="p">,</span><span class="w"> </span><span class="s">"distance"</span><span class="p">,</span><span class="w"> </span><span class="s">"bufferLength.*"</span><span class="p">)</span> |
| <span class="w"> </span><span class="p">.</span><span class="n">show</span><span class="p">()</span> |
| </code></pre></div> |
| </div> |
| <div class="tabbed-block"> |
| <div class="highlight"><pre><span></span><code><span class="kn">import</span><span class="w"> </span><span class="nn">org.apache.spark.sql.api.java.UDF2</span><span class="p">;</span> |
| <span class="kn">import</span><span class="w"> </span><span class="nn">org.apache.spark.sql.types.DataTypes</span><span class="p">;</span> |
| <span class="kn">import</span><span class="w"> </span><span class="nn">org.apache.spark.sql.types.StructType</span><span class="p">;</span> |
| <span class="kn">import</span><span class="w"> </span><span class="nn">scala.Tuple2</span><span class="p">;</span> |
| |
| <span class="n">StructType</span><span class="w"> </span><span class="n">schemaUDF</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">StructType</span><span class="p">()</span> |
| <span class="w"> </span><span class="p">.</span><span class="na">add</span><span class="p">(</span><span class="s">"buffedGeom"</span><span class="p">,</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">GeometryUDT</span><span class="p">())</span> |
| <span class="w"> </span><span class="p">.</span><span class="na">add</span><span class="p">(</span><span class="s">"length"</span><span class="p">,</span><span class="w"> </span><span class="n">DataTypes</span><span class="p">.</span><span class="na">DoubleType</span><span class="p">);</span> |
| |
| <span class="c1">// using lambda function to register the UDF</span> |
| <span class="n">sparkSession</span><span class="p">.</span><span class="na">udf</span><span class="p">().</span><span class="na">register</span><span class="p">(</span><span class="s">"udf_bufferLength"</span><span class="p">,</span> |
| <span class="w"> </span><span class="p">(</span><span class="n">UDF2</span><span class="o"><</span><span class="n">Geometry</span><span class="p">,</span><span class="w"> </span><span class="n">Double</span><span class="p">,</span><span class="w"> </span><span class="n">Tuple2</span><span class="o"><</span><span class="n">Geometry</span><span class="p">,</span><span class="w"> </span><span class="n">Double</span><span class="o">>></span><span class="p">)</span><span class="w"> </span><span class="p">(</span><span class="n">geom</span><span class="p">,</span><span class="w"> </span><span class="n">distance</span><span class="p">)</span><span class="w"> </span><span class="o">-></span><span class="w"> </span><span class="p">{</span> |
| <span class="w"> </span><span class="n">Geometry</span><span class="w"> </span><span class="n">buffed</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">geom</span><span class="p">.</span><span class="na">buffer</span><span class="p">(</span><span class="n">distance</span><span class="p">);</span> |
| <span class="w"> </span><span class="n">Double</span><span class="w"> </span><span class="n">length</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">buffed</span><span class="p">.</span><span class="na">getLength</span><span class="p">();</span> |
| <span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">Tuple2</span><span class="o"><></span><span class="p">(</span><span class="n">buffed</span><span class="p">,</span><span class="w"> </span><span class="n">length</span><span class="p">);</span> |
| <span class="w"> </span><span class="p">},</span> |
| <span class="w"> </span><span class="n">schemaUDF</span><span class="p">);</span> |
| |
| <span class="n">df</span><span class="p">.</span><span class="na">withColumn</span><span class="p">(</span><span class="s">"bufferLength"</span><span class="p">,</span><span class="w"> </span><span class="n">functions</span><span class="p">.</span><span class="na">expr</span><span class="p">(</span><span class="s">"udf_bufferLength(geom, distance)"</span><span class="p">))</span> |
| <span class="w"> </span><span class="p">.</span><span class="na">select</span><span class="p">(</span><span class="s">"geom"</span><span class="p">,</span><span class="w"> </span><span class="s">"distance"</span><span class="p">,</span><span class="w"> </span><span class="s">"bufferLength.*"</span><span class="p">)</span> |
| <span class="w"> </span><span class="p">.</span><span class="na">show</span><span class="p">();</span> |
| </code></pre></div> |
| </div> |
| <div class="tabbed-block"> |
| <div class="highlight"><pre><span></span><code><span class="kn">from</span><span class="w"> </span><span class="nn">sedona.spark</span><span class="w"> </span><span class="kn">import</span> <span class="n">GeometryType</span> |
| <span class="kn">from</span><span class="w"> </span><span class="nn">pyspark.sql.types</span><span class="w"> </span><span class="kn">import</span> <span class="o">*</span> |
| |
| <span class="n">schemaUDF</span> <span class="o">=</span> <span class="n">StructType</span><span class="p">([</span> |
| <span class="n">StructField</span><span class="p">(</span><span class="s2">"buffed"</span><span class="p">,</span> <span class="n">GeometryType</span><span class="p">()),</span> |
| <span class="n">StructField</span><span class="p">(</span><span class="s2">"length"</span><span class="p">,</span> <span class="n">DoubleType</span><span class="p">())</span> |
| <span class="p">])</span> |
| |
| <span class="k">def</span><span class="w"> </span><span class="nf">bufferAndLength</span><span class="p">(</span><span class="n">geom</span><span class="p">:</span> <span class="n">GeometryType</span><span class="p">(),</span> <span class="n">distance</span><span class="p">:</span> <span class="n">DoubleType</span><span class="p">()):</span> |
| <span class="n">buffed</span> <span class="o">=</span> <span class="n">geom</span><span class="o">.</span><span class="n">buffer</span><span class="p">(</span><span class="n">distance</span><span class="p">)</span> |
| <span class="n">length</span> <span class="o">=</span> <span class="n">buffed</span><span class="o">.</span><span class="n">length</span> |
| <span class="k">return</span> <span class="p">[</span><span class="n">buffed</span><span class="p">,</span> <span class="n">length</span><span class="p">]</span> |
| |
| <span class="n">sedona</span><span class="o">.</span><span class="n">udf</span><span class="o">.</span><span class="n">register</span><span class="p">(</span><span class="s2">"udf_bufferLength"</span><span class="p">,</span> <span class="n">bufferAndLength</span><span class="p">,</span> <span class="n">schemaUDF</span><span class="p">)</span> |
| |
| <span class="n">df</span><span class="o">.</span><span class="n">withColumn</span><span class="p">(</span><span class="s2">"bufferLength"</span><span class="p">,</span> <span class="n">expr</span><span class="p">(</span><span class="s2">"udf_bufferLength(geom, buffer)"</span><span class="p">))</span> \ |
| <span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="s2">"geom"</span><span class="p">,</span> <span class="s2">"buffer"</span><span class="p">,</span> <span class="s2">"bufferLength.*"</span><span class="p">)</span> \ |
| <span class="o">.</span><span class="n">show</span><span class="p">()</span> |
| </code></pre></div> |
| </div> |
| </div> |
| </div> |
| <p>Output:</p> |
| <div class="highlight"><pre><span></span><code>+------------------------------+--------+--------------------------------------------------+-----------------+ |
| | geom|distance| buffedGeom| length| |
| +------------------------------+--------+--------------------------------------------------+-----------------+ |
| |POLYGON ((1 1, 1 2, 2 1, 1 1))| 10.0|POLYGON ((1 -9, -0.9509032201612866 -8.80785280...|66.14518337329191| |
| +------------------------------+--------+--------------------------------------------------+-----------------+ |
| </code></pre></div> |
| <h2 id="spatial-vectorized-udfs-python-only">Spatial vectorized udfs (Python only)<a class="headerlink" href="#spatial-vectorized-udfs-python-only" title="Permanent link">¶</a></h2> |
| <p>By default when you create the user defined functions in Python, the UDFs are not vectorized. |
| This means that the UDFs are called row by row which can be slow. |
| To speed up the UDFs, you can use the <code>vectorized</code> UDF which will be called in a batch mode |
| using Apache Arrow.</p> |
| <p>To create a vectorized UDF please use the decorator sedona_vectorized_udf. |
| Currently supports only the scalar UDFs. Vectorized UDFs are way faster than |
| the normal UDFs. It might be even 2x faster than the normal UDFs.</p> |
| <div class="admonition note"> |
| <p class="admonition-title">Note</p> |
| <p>When you use geometry as an input type, please include the BaseGeometry type, |
| like Point from shapely or geopandas GeoSeries, when you use GEO_SERIESΒ vectorizedΒ udf. |
| That's how Sedona infers the type and knows if the data should be cast.</p> |
| </div> |
| <p>Decorator signature looks as follows:</p> |
| <div class="highlight"><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">sedona_vectorized_udf</span><span class="p">(</span> |
| <span class="n">udf_type</span><span class="p">:</span> <span class="n">SedonaUDFType</span> <span class="o">=</span> <span class="n">SedonaUDFType</span><span class="o">.</span><span class="n">SHAPELY_SCALAR</span><span class="p">,</span> <span class="n">return_type</span><span class="p">:</span> <span class="n">DataType</span> |
| <span class="p">):</span> <span class="o">...</span> |
| </code></pre></div> |
| <p>where udf_type is the type of the UDF function, currently supported are:</p> |
| <ul> |
| <li>SHAPELY_SCALAR</li> |
| <li>GEO_SERIES</li> |
| </ul> |
| <p>The main difference is what input data you get in the function |
| Let's analyze the two examples below, that creates buffers from |
| a given geometry.</p> |
| <h3 id="shapely-scalar-udf">Shapely scalar UDF<a class="headerlink" href="#shapely-scalar-udf" title="Permanent link">¶</a></h3> |
| <div class="highlight"><pre><span></span><code><span class="kn">import</span><span class="w"> </span><span class="nn">shapely.geometry.base</span><span class="w"> </span><span class="k">as</span><span class="w"> </span><span class="nn">b</span> |
| <span class="kn">from</span><span class="w"> </span><span class="nn">sedona.spark</span><span class="w"> </span><span class="kn">import</span> <span class="n">sedona_vectorized_udf</span> |
| |
| |
| <span class="nd">@sedona_vectorized_udf</span><span class="p">(</span><span class="n">return_type</span><span class="o">=</span><span class="n">GeometryType</span><span class="p">())</span> |
| <span class="k">def</span><span class="w"> </span><span class="nf">vectorized_buffer</span><span class="p">(</span><span class="n">geom</span><span class="p">:</span> <span class="n">b</span><span class="o">.</span><span class="n">BaseGeometry</span><span class="p">)</span> <span class="o">-></span> <span class="n">b</span><span class="o">.</span><span class="n">BaseGeometry</span><span class="p">:</span> |
| <span class="k">return</span> <span class="n">geom</span><span class="o">.</span><span class="n">buffer</span><span class="p">(</span><span class="mf">0.1</span><span class="p">)</span> |
| </code></pre></div> |
| <h3 id="geoseries-udf">GeoSeries UDF<a class="headerlink" href="#geoseries-udf" title="Permanent link">¶</a></h3> |
| <div class="highlight"><pre><span></span><code><span class="kn">import</span><span class="w"> </span><span class="nn">geopandas</span><span class="w"> </span><span class="k">as</span><span class="w"> </span><span class="nn">gpd</span> |
| <span class="kn">from</span><span class="w"> </span><span class="nn">sedona.spark</span><span class="w"> </span><span class="kn">import</span> <span class="n">sedona_vectorized_udf</span><span class="p">,</span> <span class="n">SedonaUDFType</span> |
| <span class="kn">from</span><span class="w"> </span><span class="nn">sedona.spark</span><span class="w"> </span><span class="kn">import</span> <span class="n">GeometryType</span> |
| |
| |
| <span class="nd">@sedona_vectorized_udf</span><span class="p">(</span><span class="n">udf_type</span><span class="o">=</span><span class="n">SedonaUDFType</span><span class="o">.</span><span class="n">GEO_SERIES</span><span class="p">,</span> <span class="n">return_type</span><span class="o">=</span><span class="n">GeometryType</span><span class="p">())</span> |
| <span class="k">def</span><span class="w"> </span><span class="nf">vectorized_geo_series_buffer</span><span class="p">(</span><span class="n">series</span><span class="p">:</span> <span class="n">gpd</span><span class="o">.</span><span class="n">GeoSeries</span><span class="p">)</span> <span class="o">-></span> <span class="n">gpd</span><span class="o">.</span><span class="n">GeoSeries</span><span class="p">:</span> |
| <span class="n">buffered</span> <span class="o">=</span> <span class="n">series</span><span class="o">.</span><span class="n">buffer</span><span class="p">(</span><span class="mf">0.1</span><span class="p">)</span> |
| |
| <span class="k">return</span> <span class="n">buffered</span> |
| </code></pre></div> |
| <p>To call the UDFs you can use the following code:</p> |
| <div class="highlight"><pre><span></span><code><span class="c1"># Shapely scalar UDF</span> |
| <span class="n">df</span><span class="o">.</span><span class="n">withColumn</span><span class="p">(</span><span class="s2">"buffered"</span><span class="p">,</span> <span class="n">vectorized_buffer</span><span class="p">(</span><span class="n">df</span><span class="o">.</span><span class="n">geom</span><span class="p">))</span><span class="o">.</span><span class="n">show</span><span class="p">()</span> |
| |
| <span class="c1"># GeoSeries UDF</span> |
| <span class="n">df</span><span class="o">.</span><span class="n">withColumn</span><span class="p">(</span><span class="s2">"buffered"</span><span class="p">,</span> <span class="n">vectorized_geo_series_buffer</span><span class="p">(</span><span class="n">df</span><span class="o">.</span><span class="n">geom</span><span class="p">))</span><span class="o">.</span><span class="n">show</span><span class="p">()</span> |
| </code></pre></div> |
| <h2 id="save-to-permanent-storage">Save to permanent storage<a class="headerlink" href="#save-to-permanent-storage" title="Permanent link">¶</a></h2> |
| <p>To save a Spatial DataFrame to some permanent storage such as Hive tables and HDFS, you can simply convert each geometry in the Geometry type column back to a plain String and save the plain DataFrame to wherever you want.</p> |
| <p>Use the following code to convert the Geometry column in a DataFrame back to a WKT string column:</p> |
| <div class="highlight"><pre><span></span><code><span class="k">SELECT</span><span class="w"> </span><span class="n">ST_AsText</span><span class="p">(</span><span class="n">countyshape</span><span class="p">)</span> |
| <span class="k">FROM</span><span class="w"> </span><span class="n">polygondf</span> |
| </code></pre></div> |
| <h2 id="save-geojson">Save GeoJSON<a class="headerlink" href="#save-geojson" title="Permanent link">¶</a></h2> |
| <p>Since <code>v1.6.1</code>, the GeoJSON data source in Sedona can be used to save a Spatial DataFrame to a single-line JSON file, with geometries written in GeoJSON format.</p> |
| <div class="highlight"><pre><span></span><code>df.write.format("geojson").save("YOUR/PATH.json") |
| </code></pre></div> |
| <p>See <a href="../files/geojson-sedona-spark/">this page</a> for more information on writing to GeoJSON.</p> |
| <h2 id="save-geoparquet">Save GeoParquet<a class="headerlink" href="#save-geoparquet" title="Permanent link">¶</a></h2> |
| <p>Since v<code>1.3.0</code>, Sedona natively supports writing GeoParquet file. GeoParquet can be saved as follows:</p> |
| <div class="highlight"><pre><span></span><code><span class="n">df</span><span class="p">.</span><span class="n">write</span><span class="p">.</span><span class="n">format</span><span class="p">(</span><span class="s">"geoparquet"</span><span class="p">).</span><span class="n">save</span><span class="p">(</span><span class="n">geoparquetoutputlocation</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="s">"/GeoParquet_File_Name.parquet"</span><span class="p">)</span> |
| </code></pre></div> |
| <p>See <a href="../files/geoparquet-sedona-spark/">this page</a> for more information on writing to GeoParquet.</p> |
| <h2 id="save-to-postgis">Save to Postgis<a class="headerlink" href="#save-to-postgis" title="Permanent link">¶</a></h2> |
| <p>Unfortunately, the Spark SQL JDBC data source doesn't support creating geometry types in PostGIS using the 'createTableColumnTypes' option. |
| Only the Spark built-in types are recognized. |
| This means that you'll need to manage your PostGIS schema separately from Spark. |
| One way to do this is to create the table with the correct geometry column before writing data to it with Spark. |
| Alternatively, you can write your data to the table using Spark and then manually alter the column to be a geometry type afterward.</p> |
| <p>Postgis uses EWKB to serialize geometries. |
| If you convert your geometries to EWKB format in Sedona you don't have to do any additional conversion in Postgis.</p> |
| <div class="highlight"><pre><span></span><code>my_postgis_db# create table my_table (id int8, geom geometry); |
| |
| df.withColumn("geom", expr("ST_AsEWKB(geom)") |
| .write.format("jdbc") |
| .option("truncate","true") // Don't let Spark recreate the table. |
| // Other options. |
| .save() |
| |
| // If you didn't create the table before writing you can change the type afterward. |
| my_postgis_db# alter table my_table alter column geom type geometry; |
| </code></pre></div> |
| <h2 id="convert-between-dataframe-and-spatialrdd">Convert between DataFrame and SpatialRDD<a class="headerlink" href="#convert-between-dataframe-and-spatialrdd" title="Permanent link">¶</a></h2> |
| <h3 id="dataframe-to-spatialrdd">DataFrame to SpatialRDD<a class="headerlink" href="#dataframe-to-spatialrdd" title="Permanent link">¶</a></h3> |
| <p>Use SedonaSQL DataFrame-RDD Adapter to convert a DataFrame to an SpatialRDD.</p> |
| <div class="tabbed-set tabbed-alternate" data-tabs="19:3"><input checked="checked" id="__tabbed_19_1" name="__tabbed_19" type="radio" /><input id="__tabbed_19_2" name="__tabbed_19" type="radio" /><input id="__tabbed_19_3" name="__tabbed_19" type="radio" /><div class="tabbed-labels"><label for="__tabbed_19_1">Scala</label><label for="__tabbed_19_2">Java</label><label for="__tabbed_19_3">Python</label></div> |
| <div class="tabbed-content"> |
| <div class="tabbed-block"> |
| <div class="highlight"><pre><span></span><code><span class="kd">var</span><span class="w"> </span><span class="n">spatialRDD</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nc">StructuredAdapter</span><span class="p">.</span><span class="n">toSpatialRdd</span><span class="p">(</span><span class="n">spatialDf</span><span class="p">,</span><span class="w"> </span><span class="s">"usacounty"</span><span class="p">)</span> |
| </code></pre></div> |
| </div> |
| <div class="tabbed-block"> |
| <div class="highlight"><pre><span></span><code><span class="n">SpatialRDD</span><span class="w"> </span><span class="n">spatialRDD</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">StructuredAdapter</span><span class="p">.</span><span class="na">toSpatialRdd</span><span class="p">(</span><span class="n">spatialDf</span><span class="p">,</span><span class="w"> </span><span class="s">"usacounty"</span><span class="p">)</span> |
| </code></pre></div> |
| </div> |
| <div class="tabbed-block"> |
| <div class="highlight"><pre><span></span><code><span class="kn">from</span><span class="w"> </span><span class="nn">sedona.spark</span><span class="w"> </span><span class="kn">import</span> <span class="n">StructuredAdapter</span> |
| |
| <span class="n">spatialRDD</span> <span class="o">=</span> <span class="n">StructuredAdapter</span><span class="o">.</span><span class="n">toSpatialRdd</span><span class="p">(</span><span class="n">spatialDf</span><span class="p">,</span> <span class="s2">"usacounty"</span><span class="p">)</span> |
| </code></pre></div> |
| </div> |
| </div> |
| </div> |
| <p>"usacounty" is the name of the geometry column. It is an optional parameter. If you don't provide it, the first geometry column will be used.</p> |
| <h3 id="spatialrdd-to-dataframe">SpatialRDD to DataFrame<a class="headerlink" href="#spatialrdd-to-dataframe" title="Permanent link">¶</a></h3> |
| <p>Use SedonaSQL DataFrame-RDD Adapter to convert a DataFrame to an SpatialRDD. Please read <a href="../api/javadoc/sql/org/apache/sedona/sql/utils/index.html">Adapter Scaladoc</a></p> |
| <div class="tabbed-set tabbed-alternate" data-tabs="20:3"><input checked="checked" id="__tabbed_20_1" name="__tabbed_20" type="radio" /><input id="__tabbed_20_2" name="__tabbed_20" type="radio" /><input id="__tabbed_20_3" name="__tabbed_20" type="radio" /><div class="tabbed-labels"><label for="__tabbed_20_1">Scala</label><label for="__tabbed_20_2">Java</label><label for="__tabbed_20_3">Python</label></div> |
| <div class="tabbed-content"> |
| <div class="tabbed-block"> |
| <div class="highlight"><pre><span></span><code><span class="kd">var</span><span class="w"> </span><span class="n">spatialDf</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nc">StructuredAdapter</span><span class="p">.</span><span class="n">toDf</span><span class="p">(</span><span class="n">spatialRDD</span><span class="p">,</span><span class="w"> </span><span class="n">sedona</span><span class="p">)</span> |
| </code></pre></div> |
| </div> |
| <div class="tabbed-block"> |
| <div class="highlight"><pre><span></span><code><span class="n">Dataset</span><span class="o"><</span><span class="n">Row</span><span class="o">></span><span class="w"> </span><span class="n">spatialDf</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">StructuredAdapter</span><span class="p">.</span><span class="na">toDf</span><span class="p">(</span><span class="n">spatialRDD</span><span class="p">,</span><span class="w"> </span><span class="n">sedona</span><span class="p">)</span> |
| </code></pre></div> |
| </div> |
| <div class="tabbed-block"> |
| <div class="highlight"><pre><span></span><code><span class="kn">from</span><span class="w"> </span><span class="nn">sedona.spark</span><span class="w"> </span><span class="kn">import</span> <span class="n">StructuredAdapter</span> |
| |
| <span class="n">spatialDf</span> <span class="o">=</span> <span class="n">StructuredAdapter</span><span class="o">.</span><span class="n">toDf</span><span class="p">(</span><span class="n">spatialRDD</span><span class="p">,</span> <span class="n">sedona</span><span class="p">)</span> |
| </code></pre></div> |
| </div> |
| </div> |
| </div> |
| <h3 id="spatialrdd-to-dataframe-with-spatial-partitioning">SpatialRDD to DataFrame with spatial partitioning<a class="headerlink" href="#spatialrdd-to-dataframe-with-spatial-partitioning" title="Permanent link">¶</a></h3> |
| <p>By default, <code>StructuredAdapter.toDf()</code> does not preserve spatial partitions because doing so |
| may introduce duplicate features for most types of spatial data. These duplicates |
| are introduced on purpose to ensure correctness when performing a spatial join; |
| however, when using Sedona to prepare a dataset for distribution this is not typically |
| desired.</p> |
| <p>You can use <code>StructuredAdapter</code> and the <code>spatialRDD.spatialPartitioningWithoutDuplicates</code> function to obtain a Sedona DataFrame that is spatially partitioned without duplicates. This is especially useful for generating balanced GeoParquet files while preserving spatial proximity within files, which is crucial for optimizing filter pushdown performance in GeoParquet files.</p> |
| <div class="tabbed-set tabbed-alternate" data-tabs="21:3"><input checked="checked" id="__tabbed_21_1" name="__tabbed_21" type="radio" /><input id="__tabbed_21_2" name="__tabbed_21" type="radio" /><input id="__tabbed_21_3" name="__tabbed_21" type="radio" /><div class="tabbed-labels"><label for="__tabbed_21_1">Scala</label><label for="__tabbed_21_2">Java</label><label for="__tabbed_21_3">Python</label></div> |
| <div class="tabbed-content"> |
| <div class="tabbed-block"> |
| <div class="highlight"><pre><span></span><code><span class="n">spatialRDD</span><span class="p">.</span><span class="n">spatialPartitioningWithoutDuplicates</span><span class="p">(</span><span class="nc">GridType</span><span class="p">.</span><span class="nc">KDBTREE</span><span class="p">)</span> |
| <span class="c1">// Specify the desired number of partitions as 10, though the actual number may vary</span> |
| <span class="c1">// spatialRDD.spatialPartitioningWithoutDuplicates(GridType.KDBTREE, 10)</span> |
| <span class="kd">var</span><span class="w"> </span><span class="n">spatialDf</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nc">StructuredAdapter</span><span class="p">.</span><span class="n">toSpatialPartitionedDf</span><span class="p">(</span><span class="n">spatialRDD</span><span class="p">,</span><span class="w"> </span><span class="n">sedona</span><span class="p">)</span> |
| </code></pre></div> |
| </div> |
| <div class="tabbed-block"> |
| <div class="highlight"><pre><span></span><code><span class="n">spatialRDD</span><span class="p">.</span><span class="na">spatialPartitioningWithoutDuplicates</span><span class="p">(</span><span class="n">GridType</span><span class="p">.</span><span class="na">KDBTREE</span><span class="p">)</span> |
| <span class="c1">// Specify the desired number of partitions as 10, though the actual number may vary</span> |
| <span class="c1">// spatialRDD.spatialPartitioningWithoutDuplicates(GridType.KDBTREE, 10)</span> |
| <span class="n">Dataset</span><span class="o"><</span><span class="n">Row</span><span class="o">></span><span class="w"> </span><span class="n">spatialDf</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">StructuredAdapter</span><span class="p">.</span><span class="na">toSpatialPartitionedDf</span><span class="p">(</span><span class="n">spatialRDD</span><span class="p">,</span><span class="w"> </span><span class="n">sedona</span><span class="p">)</span> |
| </code></pre></div> |
| </div> |
| <div class="tabbed-block"> |
| <div class="highlight"><pre><span></span><code><span class="kn">from</span><span class="w"> </span><span class="nn">sedona.spark</span><span class="w"> </span><span class="kn">import</span> <span class="n">StructuredAdapter</span> |
| |
| <span class="n">spatialRDD</span><span class="o">.</span><span class="n">spatialPartitioningWithoutDuplicates</span><span class="p">(</span><span class="n">GridType</span><span class="o">.</span><span class="n">KDBTREE</span><span class="p">)</span> |
| <span class="c1"># Specify the desired number of partitions as 10, though the actual number may vary</span> |
| <span class="c1"># spatialRDD.spatialPartitioningWithoutDuplicates(GridType.KDBTREE, 10)</span> |
| <span class="n">spatialDf</span> <span class="o">=</span> <span class="n">StructuredAdapter</span><span class="o">.</span><span class="n">toSpatialPartitionedDf</span><span class="p">(</span><span class="n">spatialRDD</span><span class="p">,</span> <span class="n">sedona</span><span class="p">)</span> |
| </code></pre></div> |
| </div> |
| </div> |
| </div> |
| <h3 id="spatialpairrdd-to-dataframe">SpatialPairRDD to DataFrame<a class="headerlink" href="#spatialpairrdd-to-dataframe" title="Permanent link">¶</a></h3> |
| <p>PairRDD is the result of a spatial join query or distance join query. SedonaSQL DataFrame-RDD Adapter can convert the result to a DataFrame. But you need to provide the schema of the left and right RDDs.</p> |
| <div class="tabbed-set tabbed-alternate" data-tabs="22:3"><input checked="checked" id="__tabbed_22_1" name="__tabbed_22" type="radio" /><input id="__tabbed_22_2" name="__tabbed_22" type="radio" /><input id="__tabbed_22_3" name="__tabbed_22" type="radio" /><div class="tabbed-labels"><label for="__tabbed_22_1">Scala</label><label for="__tabbed_22_2">Java</label><label for="__tabbed_22_3">Python</label></div> |
| <div class="tabbed-content"> |
| <div class="tabbed-block"> |
| <div class="highlight"><pre><span></span><code><span class="kd">var</span><span class="w"> </span><span class="n">joinResultDf</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nc">StructuredAdapter</span><span class="p">.</span><span class="n">toDf</span><span class="p">(</span><span class="n">joinResultPairRDD</span><span class="p">,</span><span class="w"> </span><span class="n">leftDf</span><span class="p">.</span><span class="n">schema</span><span class="p">,</span><span class="w"> </span><span class="n">rightDf</span><span class="p">.</span><span class="n">schema</span><span class="p">,</span><span class="w"> </span><span class="n">sedona</span><span class="p">)</span> |
| </code></pre></div> |
| </div> |
| <div class="tabbed-block"> |
| <div class="highlight"><pre><span></span><code><span class="n">Dataset</span><span class="w"> </span><span class="n">joinResultDf</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">StructuredAdapter</span><span class="p">.</span><span class="na">toDf</span><span class="p">(</span><span class="n">joinResultPairRDD</span><span class="p">,</span><span class="w"> </span><span class="n">leftDf</span><span class="p">.</span><span class="na">schema</span><span class="p">,</span><span class="w"> </span><span class="n">rightDf</span><span class="p">.</span><span class="na">schema</span><span class="p">,</span><span class="w"> </span><span class="n">sedona</span><span class="p">);</span> |
| </code></pre></div> |
| </div> |
| <div class="tabbed-block"> |
| <div class="highlight"><pre><span></span><code><span class="kn">from</span><span class="w"> </span><span class="nn">sedona.spark</span><span class="w"> </span><span class="kn">import</span> <span class="n">StructuredAdapter</span> |
| |
| <span class="n">joinResultDf</span> <span class="o">=</span> <span class="n">StructuredAdapter</span><span class="o">.</span><span class="n">pairRddToDf</span><span class="p">(</span><span class="n">result_pair_rdd</span><span class="p">,</span> <span class="n">leftDf</span><span class="o">.</span><span class="n">schema</span><span class="p">,</span> <span class="n">rightDf</span><span class="o">.</span><span class="n">schema</span><span class="p">,</span> <span class="n">spark</span><span class="p">)</span> |
| </code></pre></div> |
| </div> |
| </div> |
| </div> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <aside class="md-source-file"> |
| |
| |
| <span class="md-source-file__fact"> |
| <span class="md-icon" title="Last update"> |
| <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M21 13.1c-.1 0-.3.1-.4.2l-1 1 2.1 2.1 1-1c.2-.2.2-.6 0-.8l-1.3-1.3c-.1-.1-.2-.2-.4-.2m-1.9 1.8-6.1 6V23h2.1l6.1-6.1zM12.5 7v5.2l4 2.4-1 1L11 13V7zM11 21.9c-5.1-.5-9-4.8-9-9.9C2 6.5 6.5 2 12 2c5.3 0 9.6 4.1 10 9.3-.3-.1-.6-.2-1-.2s-.7.1-1 .2C19.6 7.2 16.2 4 12 4c-4.4 0-8 3.6-8 8 0 4.1 3.1 7.5 7.1 7.9l-.1.2z"/></svg> |
| </span> |
| <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-datetime" title="May 1, 2026 06:59:09 UTC">May 1, 2026 06:59:09</span> |
| </span> |
| |
| |
| |
| |
| |
| </aside> |
| |
| |
| |
| |
| |
| |
| </article> |
| </div> |
| |
| |
| |
| |
| <script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script> |
| </div> |
| |
| <button type="button" class="md-top md-icon" data-md-component="top" hidden> |
| |
| <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8z"/></svg> |
| Back to top |
| </button> |
| |
| </main> |
| |
| <footer class="footer md-footer"> |
| <div class="container"> |
| |
| <div class="footer__top"> |
| |
| <div class="col-left"> |
| <img src="../../image/footer/logo-footer.svg" alt="" class="footer-logo"> |
| </div> |
| |
| <div class="col-right"> |
| |
| |
| <div class="md-social"> |
| |
| |
| |
| |
| |
| |
| |
| |
| <a href="https://github.com/apache/sedona" target="_blank" rel="noopener" title="github.com" class="md-social__link"> |
| <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M173.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6m-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3m44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9M252.8 8C114.1 8 8 113.3 8 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C436.2 457.8 504 362.9 504 252 504 113.3 391.5 8 252.8 8M105.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1m-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7m32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1m-11.4-14.7c-1.6 1-1.6 3.6 0 5.9s4.3 3.3 5.6 2.3c1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2"/></svg> |
| </a> |
| |
| |
| |
| |
| |
| |
| |
| |
| <a href="https://twitter.com/ApacheSedona" target="_blank" rel="noopener" title="twitter.com" class="md-social__link"> |
| <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M459.4 151.7c.3 4.5.3 9.1.3 13.6 0 138.7-105.6 298.6-298.6 298.6-59.5 0-114.7-17.2-161.1-47.1 8.4 1 16.6 1.3 25.3 1.3 49.1 0 94.2-16.6 130.3-44.8-46.1-1-84.8-31.2-98.1-72.8 6.5 1 13 1.6 19.8 1.6 9.4 0 18.8-1.3 27.6-3.6-48.1-9.7-84.1-52-84.1-103v-1.3c14 7.8 30.2 12.7 47.4 13.3-28.3-18.8-46.8-51-46.8-87.4 0-19.5 5.2-37.4 14.3-53C87.4 130.8 165 172.4 252.1 176.9c-1.6-7.8-2.6-15.9-2.6-24C249.5 95.1 296.3 48 354.4 48c30.2 0 57.5 12.7 76.7 33.1 23.7-4.5 46.5-13.3 66.6-25.3-7.8 24.4-24.4 44.8-46.1 57.8 21.1-2.3 41.6-8.1 60.4-16.2-14.3 20.8-32.2 39.3-52.6 54.3"/></svg> |
| </a> |
| |
| |
| |
| |
| |
| |
| |
| |
| <a href="https://discord.gg/9A3k5dEBsY" target="_blank" rel="noopener" title="discord.gg" class="md-social__link"> |
| <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M492.5 69.8c-.2-.3-.4-.6-.8-.7-38.1-17.5-78.4-30-119.7-37.1-.4-.1-.8 0-1.1.1s-.6.4-.8.8c-5.5 9.9-10.5 20.2-14.9 30.6-44.6-6.8-89.9-6.8-134.4 0-4.5-10.5-9.5-20.7-15.1-30.6-.2-.3-.5-.6-.8-.8s-.7-.2-1.1-.2C162.5 39 122.2 51.5 84.1 69c-.3.1-.6.4-.8.7C7.1 183.5-13.8 294.6-3.6 404.2c0 .3.1.5.2.8s.3.4.5.6c44.4 32.9 94 58 146.8 74.2.4.1.8.1 1.1 0s.7-.4.9-.7c11.3-15.4 21.4-31.8 30-48.8.1-.2.2-.5.2-.8s0-.5-.1-.8-.2-.5-.4-.6-.4-.3-.7-.4c-15.8-6.1-31.2-13.4-45.9-21.9-.3-.2-.5-.4-.7-.6s-.3-.6-.3-.9 0-.6.2-.9.3-.5.6-.7c3.1-2.3 6.2-4.7 9.1-7.1.3-.2.6-.4.9-.4s.7 0 1 .1c96.2 43.9 200.4 43.9 295.5 0 .3-.1.7-.2 1-.2s.7.2.9.4c2.9 2.4 6 4.9 9.1 7.2.2.2.4.4.6.7s.2.6.2.9-.1.6-.3.9-.4.5-.6.6c-14.7 8.6-30 15.9-45.9 21.8-.2.1-.5.2-.7.4s-.3.4-.4.7-.1.5-.1.8.1.5.2.8c8.8 17 18.8 33.3 30 48.8.2.3.6.6.9.7s.8.1 1.1 0c52.9-16.2 102.6-41.3 147.1-74.2.2-.2.4-.4.5-.6s.2-.5.2-.8c12.3-126.8-20.5-236.9-86.9-334.5zm-302 267.7c-29 0-52.8-26.6-52.8-59.2s23.4-59.2 52.8-59.2c29.7 0 53.3 26.8 52.8 59.2 0 32.7-23.4 59.2-52.8 59.2m195.4 0c-29 0-52.8-26.6-52.8-59.2s23.4-59.2 52.8-59.2c29.7 0 53.3 26.8 52.8 59.2 0 32.7-23.2 59.2-52.8 59.2"/></svg> |
| </a> |
| |
| </div> |
| |
| </div> |
| </div> |
| |
| <hr class="footer-hr"></hr> |
| |
| <div class="footer__bot"> |
| <div class="md-copyright"> |
| |
| <div class="md-copyright__highlight">Copyright Β© 2026 The Apache Software Foundation. Apache Sedona, Sedona, Apache, the Apache feather logo, and the Apache Sedona project logo are either registered trademarks or trademarks of The Apache Software Foundation in the United States and other countries. All other marks mentioned may be trademarks or registered trademarks of their respective owners. Please visit <a href="https://www.apache.org/">Apache Software Foundation</a> for more details.<img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=f3e121f6-c909-4592-8be6-5bd345768cba" /><img referrerpolicy="no-referrer-when-downgrade" src="https://analytics.apache.org/matomo.php?idsite=74&rec=1" /></div> |
| |
| <div class="md-copyright__asf-links"> |
| <a href="https://www.apache.org/licenses/">License</a> | |
| <a href="https://www.apache.org/events/current-event">Events</a> | |
| <a href="https://www.apache.org/foundation/sponsorship.html">Sponsorship</a> | |
| <a href="https://www.apache.org/foundation/thanks.html">Thanks</a> | |
| <a href="https://www.apache.org/security/">Security</a> | |
| <a href="https://privacy.apache.org/policies/privacy-policy-public.html">Privacy</a> | |
| <a href="https://www.apache.org/foundation/marks/">Trademarks</a> |
| </div> |
| |
| <div class="md-copyright__generator">Made with <a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">Material for MkDocs</a> |
| </div> |
| |
| </div> |
| </div> |
| |
| </div> |
| </footer> |
| |
| </div> |
| <div class="md-dialog" data-md-component="dialog"> |
| <div class="md-dialog__inner md-typeset"></div> |
| </div> |
| |
| |
| |
| |
| |
| <script id="__config" type="application/json">{"annotate": null, "base": "../..", "features": ["announce.dismiss", "content.code.copy", "content.action.edit", "search.highlight", "search.share", "search.suggest", "navigation.footer", "navigation.instant", "navigation.instant.prefetch", "navigation.tabs", "navigation.tabs.sticky", "navigation.top"], "search": "../../assets/javascripts/workers/search.2c215733.min.js", "tags": null, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": {"default": ["latest"], "provider": "mike"}}</script> |
| |
| |
| <script src="../../assets/javascripts/bundle.d7400e89.min.js"></script> |
| |
| <script src="../../assets/javascripts/main.min.js"></script> |
| |
| |
| </body> |
| </html> |