ArcGIS GeoAnalytics Engine in Databricks


This can be a collaborative publish from Esri and Databricks. We thank Senior Answer Engineer Arif Masrur, Ph.D. at Esri for his contributions.


Advances in large knowledge have enabled organizations throughout all industries to deal with important scientific, societal, and enterprise points. Huge knowledge infrastructure growth assists knowledge analysts, engineers, and scientists tackle the core challenges of working with large knowledge – quantity, velocity, veracity, worth, and selection. Nevertheless, processing and analyzing huge geospatial knowledge presents its personal set of challenges. Every single day, a whole bunch of exabytes of location-aware knowledge are generated. These knowledge units comprise a variety of connections and complicated relationships between real-world entities, necessitating superior tooling able to successfully binding these multifaceted relationships by means of optimized operations equivalent to spatial and spatiotemporal joins. The quite a few geospatial codecs that have to be ingested, verified and standardized for environment friendly scaled evaluation add to the complexity.

Among the difficulties of working with geographical knowledge are addressed by the not too long ago introduced assist for built-in H3 expressions in Databricks. Nevertheless, there are numerous geospatial use instances, a few of that are extra complicated or centered on geometry somewhat than grid indices. Customers can work with a spread of instruments and libraries on the Databricks platform whereas profiting from quite a few Lakehouse capabilities.

Esri, the world’s main GIS software program vendor, affords a complete set of instruments, together with ArcGIS Enterprise, ArcGIS Professional, and ArcGIS On-line, to unravel the aforementioned geo-analytics challenges. Organizations and knowledge practitioners utilizing Databricks want entry to instruments the place they do their day-to-day work outdoors of the ArcGIS setting. This is the reason we’re excited to announce the primary launch of ArcGIS GeoAnalytics Engine (hereafter known as GA Engine), which permits knowledge scientists, engineers, and analysts to investigate their geospatial knowledge inside their present large knowledge evaluation environments. Particularly, this engine is a plugin for Apache Spark™ that extends knowledge frames with very quick spatial processing and analytics, able to run in Databricks.

Advantages of the ArcGIS GeoAnalytics Engine

Esri’s GA Engine permits knowledge scientists to entry geoanalytical capabilities and instruments inside their Databricks setting. The important thing options of GA Engine are:

  • 120+ spatial SQL capabilities—Create geometries, take a look at spatial relationships, and extra utilizing Python or SQL syntax
  • Highly effective evaluation instruments—Run frequent spatiotemporal and statistical evaluation workflows with just a few strains of code
  • Computerized spatial indexing—Carry out optimized spatial joins and different operations instantly
  • Interoperability with frequent GIS knowledge sources—Load and save knowledge from shapefiles, characteristic providers, and vector tiles
  • Cloud-native and Spark-native—Examined and able to set up on Databricks
  • Simple to make use of—Construct spatially-enabled large knowledge pipelines with an intuitive Python API that extends PySpark

SQL capabilities and evaluation instruments
Presently GA Engine supplies 120+ SQL capabilities and 15+ spatial evaluation instruments that assist superior spatial and spatiotemporal evaluation. Primarily, GA Engine capabilities prolong the Spark SQL API by enabling spatial queries on DataFrame columns. These capabilities could be known as with Python capabilities or in a PySpark SQL question assertion and allow creating geometries, working on geometries, evaluating spatial relationships, summarizing geometries, and extra. In distinction to SQL capabilities which function on a row-by-row foundation utilizing one or two columns, GA Engine instruments are conscious of all columns in a DataFrame and use all rows to compute a end result if required. These extensive arrays of study instruments allow you to handle, enrich, summarize, or analyze complete datasets.

  • Mixture Factors
  • Calculate Density
  • Discover Hotspots
  • Discover Level Clusters
  • Geographically Weighted Regression (GWR)
  • Detect Incidents
  • Discover Dwells
  • Discover Comparable
  • Calculate Subject
  • Clip
  • Overlay
  • Spatiotemporal Be a part of
  • Reconstruct Tracks
  • Summarize Inside
  • Hint Proximity Occasions
  • Calculate Movement Statistics
  • Group By Proximity

The GA Engine is a robust analytical device. To not be overshadowed, although, is how simple the GA Engine makes working with frequent GIS codecs. The GA Engine documentation consists of a number of tutorials for studying and writing to and from Shapefiles and Characteristic Providers. The power to course of geospatial knowledge utilizing GIS codecs supplies nice interoperability between Databricks and Esri merchandise.

Databricks and ArcGIS: Interoperability & Analysis with GeoAnalytics Engine
Databricks and ArcGIS: Interoperability & Evaluation with GeoAnalytics Engine

GA engine for various use instances

Let’s go over a couple of use eventualities from numerous industries to point out how the ESRI’s GA Engine handles massive quantities of spatial knowledge. Help for scalable spatial and spatiotemporal evaluation is meant to help any firm in making important choices. In three numerous knowledge analytics domains—mobility, client transaction, and public service—we are going to think about revealing geographical insights.

Mobility knowledge analytics

Mobility knowledge is consistently rising and could be divided into two classes: human motion and car motion. Human mobility knowledge collected from smartphone customers in cell phone service areas present a extra in-depth take a look at human exercise patterns. Tens of millions of related automobiles’ motion knowledge present wealthy real-time data on directional site visitors volumes, site visitors flows, common speeds, congestion, and extra. These knowledge units are usually massive (billions of information) and complicated (a whole bunch of attributes). These knowledge require spatial and spatiotemporal evaluation that goes past fundamental spatial evaluation, with fast entry to superior statistical instruments and specialised geoanalytics capabilities.

Let’s begin by an instance of analyzing human motion primarily based on Cell Analytics™ knowledge from Esri accomplice Ookla®. Ookla® collects large knowledge on international wi-fi service efficiency, protection, and sign measurements primarily based on the Speedtest® software. The information consists of details about the supply system, cell community connectivity, location, and timestamp. On this case, we labored with a subset of information containing roughly 16 billion information. With instruments not optimized for parallel operations in Apache Spark(™), studying this high-volume knowledge and enabling it for spatiotemporal operations may incur hours of processing time. Utilizing a single line of code with GeoAnalytics Engine, this knowledge could be ingested from parquet recordsdata in a couple of seconds.

## Learn-in dataset 
df = spark.learn.parquet("s3://----/----/*.parquet")  
                 "ST_Point(client_longitude, client_latitude, 4326) as SHAPE")  
     .withColumn("timestamp", to_timestamp('result_date', "yyyy-MM-dd HH:mm:ss"))  

To begin deriving actionable insights, we’ll dive into the information with a easy query: What’s the spatial sample of cell units over the conterminous United States? This may permit us to start characterizing human presence and exercise. The FindHotSpots device can be utilized to establish statistically important spatial clusters of excessive values (sizzling spots) and low values (chilly spots).

Fig 1. Representation of Input and Output of FindHotSpots tool that identifies statistically significant hot spots and cold spots using the Getis-Ord Gi* statistic
Fig 1. Illustration of Enter and Output of FindHotSpots device that identifies statistically important sizzling spots and chilly spots utilizing the Getis-Ord Gi* statistic

## Discover sizzling spots  
from geoanalytics.instruments import FindHotSpots 
result_hot = FindHotSpots()  
        	.setBins(bin_size=15000, bin_size_unit="Meters")  
        	.setNeighborhood(distance=100000, distance_unit="Meters")  

The ensuing DataFrame of sizzling spots was visualized and styled utilizing Matplotlib (Determine 2). It confirmed many information of system connections (pink) in comparison with places with low density of related units (blue) within the conterminous United States. Unsurprisingly, main city areas indicated a better density of related units.

Fig 2. Hot spots of mobile device observations in the conterminous United States
Fig 2. Scorching spots of cell system observations within the conterminous United States.

Subsequent, we requested, does cell community sign energy observe a homogeneous sample throughout the US? To reply that, the AggregatePoints device was used to summarize system observations into hexagonal bins to establish areas with significantly sturdy and significantly weak mobile service (Determine 3). We used rsrp (reference sign acquired energy) – a price used to measure cell community sign energy – to calculate the imply statistic over 15km bins. This evaluation illuminated that mobile service sign energy shouldn’t be constant – as a substitute it tends to be stronger alongside the main street networks and concrete areas.

## Mixture knowledge into bins  
from geoanalytics.instruments import AggregatePoints 
result_bins = AggregatePoints()  
      	.setBins(bin_size=500000, bin_size_unit="Meters",bin_type="Hexagon")  

Along with plotting the end result utilizing st_plotting, we used the arcgis module, revealed the ensuing DataFrame as a characteristic layer in ArcGIS On-line, and created a map-based, interactive visualization.

## Publish pyspark dataframe to ArcGIS On-line (AGOL) relational database  
from arcgis import GIS 
gis = GIS(username="xxxx", password="yyyy") 
sdf = 
lyr = sdf.spatial.to_featurelayer('ookla_2018_2019_bins_15km') 
Fig 3. Interactive ArcGIS web app displaying spatial pattern of mobile device signal strengths in the Conterminous United States
Fig 3. Interactive ArcGIS net app displaying spatial sample of cell system sign strengths within the Conterminous United States

Now that we perceive the broad spatial patterns of cell units, how can we acquire deeper perception into human exercise patterns? The place do folks spend time? To reply that, we used FindDwellLocations to search for units in Denver, CO that spent at the least 5 minutes in the identical basic location on Might 31, 2019 (Friday). This evaluation can assist us perceive places with extra extended exercise, i.e., client locations, and separate these from basic journey exercise.

## Discover dwell location  
from geoanalytics.instruments import FindDwellLocations 
# Spatial filter of information to focus evaluation over Denver, Colorado  
boundingbox = df.selectExpr("device_id", "SHAPE", "timestamp", "device_model","ST_EnvIntersects(SHAPE,-104.868,39.545,-104.987,39.9883) as Filter") 
facility = boundingbox.filter(boundingbox['Filter'] == True) 
result_dwell = FindDwellLocations()  
   	.setDwellMaxDistance(max_distance=1000, max_distance_unit="Meters")  
   	.setDwellMinDuration(min_duration=30, min_duration_unit="Minutes")  

The result_dwell knowledge body supplies us with units or people that dwelled at completely different places. The dwell length heatmap in Determine 4 supplies an summary about the place folks spend their time round Denver.

Fig 4. Dwell duration heatmap on May 31, 2019, around Denver, Colorado
Fig 4. Dwell length heatmap on Might 31, 2019, round Denver, Colorado

We additionally needed to discover the places folks go to for longer durations. To perform that, we used Overlay to establish which points-of-interest (POI) footprints from SafeGraph Geometry knowledge intersected with dwell places (from result_dwell DataFrame) on Might 31, 2019. Utilizing groupBy perform, we counted the related system dwell instances for every of the highest POI classes. Determine 5 highlights that a couple of city POIs in Denver coincided with longer dwell instances together with workplace provides, stationery and present shops, and workplaces of commerce contractors.

# Overlay 
from geoanalytics.instruments import Overlay 
safegraph_poi = spark.learn.choice("header", True).choice("escape", """).csv("s3://---/*.csv.gz")  
            	.withColumn("Poly", (ST.poly_from_text("polygon_wkt", srid=4326))) 
safegraph_poi_den = safegraph_poi.the place(safegraph_poi.metropolis=="Denver").choose(
  "placekey", "parent_placekey", "safegraph_brand_ids", "location_name", 
  "Manufacturers", "store_id", "top_category", "sub_category", "naics_code",  
  "latitude", "longitude", "street_address", "metropolis", "area", 
  "postal_code", "polygon_wkt", "Poly"
).the place("Poly IS NOT NULL") 
        	.run(input_dataframe=safegraph_poi_den, overlay_dataframe=dwell_2019_05_31) 
overlay_result_groupBy = overlay_result.groupBy("top_category").imply("DwellDuration")
Fig 5. Total dwell duration by SafeGraph point-of-interest category in Denver on May 31, 2019
Fig 5. Whole dwell length by SafeGraph point-of-interest class in Denver on Might 31, 2019

This pattern analytical workflow with Cell AnalyticsTM knowledge may very well be utilized or repurposed to characterize folks’s actions extra particularly. For instance, we may make the most of the information to achieve insights into client conduct round retail places. Which eating places or espresso outlets did these units or people go to after procuring at Walmart or Costco? Moreover, these datasets could be helpful for managing pandemics and pure disasters. For instance, do folks observe public well being emergency tips throughout a pandemic? Which city places may very well be the following COVID-19 or wildfire-induced poor air high quality sizzling spots? Will we see disparities in human mobilities and actions on account of revenue inequality at a broader geographic scale?

Transaction knowledge analytics

Aggregated transaction knowledge over factors of curiosity comprises wealthy details about how and when folks spend their cash at particular places. The sheer quantity and velocity of those knowledge require superior spatial analytical instruments to know client spending conduct clearly: How does client conduct differ by geography? What companies are likely to co-locate to be worthwhile? What merchandise do customers purchase at a bodily retailer (e.g., Walmart) in comparison with the merchandise they buy on-line? Does client conduct change throughout excessive occasions equivalent to COVID-19?

These questions could be answered utilizing SafeGraph Spend knowledge and GeoAnalytics Engine. As an illustration, we needed to establish how folks’s journey patterns had been impacted throughout COVID-19 in the US. To perform that, we analyzed nationwide SafeGraph Spend knowledge from 2020 and 2021. Beneath, we present yearly spend (USD) by customers for enterprise rental vehicles, aggregated to U.S. counties. After publishing the DataFrame to ArcGIS On-line, we created an interactive map utilizing the Swipe widget from ArcGIS Net AppBuilder to shortly discover which counties confirmed change over time (Determine 6).

## Examine annual rental automobile spend between 2020 and 2021 
# Load a polygon characteristic service of US county boundaries right into a DataFrame 
county = "" 
df_county = spark.learn.format("feature-service").load(county).withColumn("form", ST.remodel("form", 4326)) 
# 2020 evaluation  
ERC_spend_2020 = spend_2020_pnt.the place(df_spend_2020.manufacturers=="Enterprise Lease-A-Automobile") 
ERC_spend_2020_point = ERC_spend_2020.withColumn("level", ST.level("longitude", "latitude", 4326)) 
ERC_spend_2020_county = AggregatePoints().setPolygons(df_county)  
        	.addSummaryField(summary_field="raw_total_spend", statistic="Sum")  
# 2021 evaluation  
ERC_spend_2021 = spend_2021_pnt.the place(df_spend_2021.manufacturers=="Enterprise Lease-A-Automobile") 
ERC_spend_2021_point = ERC_spend_2021.withColumn("level", ST.level("longitude", "latitude", 4326)) 
ERC_spend_2021_county = AggregatePoints().setPolygons(df_county)  
        	.addSummaryField(summary_field="raw_total_spend", statistic="Sum")  
# Publish dataframes to visualise and create Fig 8 net app in AGOL 
sdf = 
lyr = sdf.spatial.to_featurelayer('ERC_spend_2020_county') 
sdf = 
lyr = sdf.spatial.to_featurelayer('ERC_spend_2021_county')
Fig 6. Rental car spending pattern dashboard showing county-level aggregated spend (USD) over the pandemic years of 2020 and 2021
Fig 6. Rental automobile spending sample dashboard exhibiting county-level aggregated spend (USD) over the pandemic years of 2020 and 2021

Subsequent, we explored which U.S. county had the best on-line spend in a 12 months and different counties with comparable online-shopping spending patterns contemplating similarities in inhabitants and agricultural product sale patterns. Based mostly on attribute filtering of the spend DataFrame, we recognized that Sacramento topped the checklist in online-shopping spending in 2020. To have a look at comparable areas, we used FindSimilarLocations device to establish counties which might be most comparable or dissimilar to Sacramento when it comes to on-line procuring and spending however relative to similarities in inhabitants and agriculture (whole space of cropland and common gross sales of agricultural merchandise) (Determine 7).

## Determine 7 evaluation: Discover comparable places  
# Load a polygon characteristic service of US county boundaries right into a DataFrame 
county = "" 
df_county = spark.learn.format("feature-service").load(county).withColumn("form", ST.remodel("form", 4326)) 
# Get annual aggregated on-line spend at County stage  
result_online_spend = AggregatePoints().setPolygons(df_county)  
# Discover the County with the best on-line spend at POIs 
# Create a DataFrame with Sacramento knowledge 
Sacramento_df = result_online_spend.the place("NAME = 'Sacramento'") 
# Create a DataFrame with out theSacramento knowledge 
without_Sacramento_df = result_online_spend.the place("NAME != 'Sacramento'") 
from geoanalytics.instruments import FindSimilarLocations 
result_similar_loc = FindSimilarLocations()  
       	.setAnalysisFields("SUM_Tot_online_spend", "POPULATION", "CROP_ACR12", "AVE_SALE12")  
       	.setAppendFields("NAME", "STATE_NAME", "POPULATION", 
                        	"CROP_ACR12", "AVE_SALE12", "SUM_Tot_online_spend", "form")  
       	.run(reference_dataframe=Sacramento_df, search_dataframe=without_Sacramento_df) 
Fig 7. US Counties that are most similar to Sacramento in population, agriculture, and online shopping behavior.
Fig 7. US Counties which might be most just like Sacramento in inhabitants, agriculture, and on-line procuring conduct

Public service knowledge analytics

Public service datasets, equivalent to 311 name information, comprise precious data on non-emergency providers supplied to residents. Well timed monitoring and identification of spatiotemporal patterns on this knowledge can assist native governments plan and allocate sources for environment friendly 311 name decision.

On this instance, our objective was to shortly learn, course of/clear, and filter ~27 million information of New York 311 service requests from 2010 to February of 2022, after which reply the next for the New York Metropolis space questions:

  • What are the areas with the longest common 311 response instances?
  • Are there patterns in criticism varieties with lengthy common response instances?

To reply the primary query, the calls with the longest response instances had been recognized. Subsequent, the information was filtered to incorporate information longer than the imply length plus three commonplace deviations.

# Customized perform to clear up criticism varieties format 
from pyspark.sql.capabilities import udf 
from pyspark.sql.varieties import StringType 
from geoanalytics.instruments import Clip 
def cleanGroup(worth): 
  if "noise" in worth.decrease(): return 'noise' 
  if "basic building" in worth.decrease(): return 'basic building' 
  if "paint" in worth.decrease(): return 'paint/plaster' 
  else: return worth 
udfCleanGroup = udf(cleanGroup, StringType()) 
# Knowledge Processing: geo-enablement and cleansing 
ny_311_data_cleaned = ( ny_311_data 
  .withColumn("level", ST.remodel(ST.level("Longitude", "Latitude", 4326), 2263)) 
  .withColumn("dt_created", F.to_timestamp(F.col("Created Date"), 'MM/dd/yyyy hh:mm:ss a')) 
  .withColumn("dt_closed", F.to_timestamp(F.col("Closed Date"), 'MM/dd/yyyy hh:mm:ss a')) 
  .withColumn("duration_hr", (F.col("dt_closed").forged("lengthy") - F.col("dt_created").forged("lengthy"))/3600) 
  .filter(F.col("duration_hr") > 0) 
  .withColumn("sort", F.initcap(udfCleanGroup("Grievance Kind"))) 
  .the place("level IS NOT NULL") 
  .choose("Distinctive Key", "sort", "standing", "level", "dt_created", "dt_closed", "duration_hr") 
# Spatial filtering to focus analyis over NYC  
ny_311_data_cleaned_extent = spark.sql("SELECT *, ST_EnvIntersects(level,909126.0155,110626.2880,1610215.3590,424498.0529) AS env_intersects FROM ny311") 
## Determine 10 evaluation: spatiotemporal proximity evaluation of lengthy-response-calls criticism varieties  
# Calculate the sum of the imply length and three commonplace deviations 
ny_data_duration = ny_311_data_cleaned_extent  
    	.withColumnRenamed("sort", "Grievance Kind")  
    	.groupBy("Grievance Kind").agg( 
# Be a part of the calculated stats to the NYC 311 name information 
ny_311_stats = part of(ny_311_data_cleaned, ny_311_data_cleaned["type"] == ny_data_duration["Complaint Type"], "fullouter") 
# Choose the information that are extra than the imply length plus three commonplace deviations 
ny_311_calls_long_3stddev = ny_311_stats.filter("duration_hr > 3stddevout") 
df = ny_311_calls_long_3stddev  

To reply the second query of discovering important teams of complaints, we leveraged the GroupByProximity device to search for complaints of the identical sort that fell inside 500 toes and 5 days of one another. We then filtered for teams with greater than 10 information, and created a convex hull for every criticism group, which will likely be helpful for visualizing their spatial patterns (Determine 8). Utilizing st.plot() – a light-weight plotting technique included with ArcGIS GeoAnalytics Engine – geometries saved in a DataFrame can immediately be considered.

# Run GroupByProximity 
from geoanalytics.instruments import GroupByProximity 
grouper = GroupByProximity()  
       	.setSpatialRelationship("NearPlanar", 500, "Ft")  
       	.setTemporalRelationship("Close to", 5, "Days")  
       	.setAttributeRelationship("$a.sort == $b.sort", expression_type="Arcade") 
end result =  
# Filter for teams that are greater than 10 information 
result_group_size = end result.withColumn("group_size", F.rely("*").over(Window.partitionBy("group_id")))  
  	.filter("group_size > 10") 
# Create the convex hull for every group 
result_convex = result_group_size.groupBy("GROUP_ID")  
  	.alias("convexhull"), F.first("Grievance sort").alias("sort")) 
Fig 8. Visualizing spatial distributions of 311-call complaint types in New York City using st.plot() method
Fig 8. Visualizing spatial distributions of 311-call criticism varieties in New York Metropolis utilizing st.plot() technique

With this map, it was simple to establish the spatial distributions of various criticism varieties in New York Metropolis. As an illustration, there have been a substantial variety of noise complaints across the mid- and lower-Manhattan areas, whereas sidewalk situations are of main concern round Brooklyn and Queens. These fast data-driven insights can assist decision-makers provoke actionable measures.

Efficiency is a deciding issue for a lot of prospects attempting to decide on an evaluation resolution. Esri’s benchmark testing has proven that GA Engine supplies considerably higher efficiency when working large knowledge spatial analytics in comparison with open-source packages. The efficiency features enhance as the information dimension will increase, so customers will see even higher efficiency for bigger datasets. For instance, the desk beneath reveals compute instances for a spatial intersection activity that joins two enter datasets (factors and polygons) with different sizes as much as hundreds of thousands of information information. Every be part of situation was examined on a single and multi-machine Databricks cluster.

Spatial Intersection Inputs Compute Time (seconds)
Left Dataset Proper Dataset Single Machine Multi-Machine
50 polygons 6K factors 6 5
3K polygons 6K factors 10 5
3K polygons 2M factors 19 9
3K polygons 17M factors 46 16
220K polygons 17M factors 80 29
11M polygons 17M factors 515 (8.6 min) 129 (2.1 min)
11M polygons 19M factors 1,373 (22 min) 310 (5 min)

Structure and Set up
Earlier than wrapping up, let’s take a peek below the hood of the GeoAnalytics Engine structure and discover the way it works. As a result of it’s cloud-native and Spark-native, we will simply use the GeoAnalytics library in a cloud-based Spark setting. Putting in the GeoAnalytics Engine deployment in Databricks setting requires minimal configuration. You will load within the module through a JAR file, and it then runs utilizing the sources supplied by the cluster.

Set up has 2 fundamental steps which apply throughout AWS, Azure, and GCP:

  1. Put together the workspace
    • Create or launch a Databricks workspace
    • Add the GeoAnalytics jar file to the DBFS
    • Add and allow an init script
  2. Create a cluster
  3. Comply with these steps to authorize GA Engine
Fig. 9 Successful installation of GA Engine on an Azure Databricks cluster
Fig. 9 Profitable set up of GA Engine on an Azure Databricks cluster

Following the set up, customers will analyze utilizing a Python pocket book hooked up to the Spark setting. You may immediately entry Databricks Lakehouse Platform knowledge and carry out evaluation. Following the evaluation, you possibly can persist the outcomes by writing them again to your knowledge lake, SQL Warehouse, BI (Enterprise Intelligence) providers, or ArcGIS.

Figure 10. ArcGIS GeoAnalytics Engine Architecture for Databricks Environment
Determine 10. ArcGIS GeoAnalytics Engine Structure for Databricks Atmosphere

Street forward

On this weblog, we’ve got launched the facility of the ArcGIS GeoAnalytics Engine on Databricks and demonstrated how we will sort out probably the most difficult geospatial use instances collectively. Consult with this Databricks Pocket book for detailed reference of the examples proven above. Going ahead, GeoAnalytics Engine will likely be enhanced with extra performance together with GeoJSON export, H3 binning assist, and clustering algorithms equivalent to Okay-Nearest Neighbor.

GeoAnalytics Engine works with Databricks on Azure, AWS, and GCP. Please attain out to your Databricks and Esri account groups for particulars about deploying the GeoAnalytics library in your most well-liked Databricks setting. To be taught extra about GeoAnalytics Engine and discover tips on how to acquire entry to this highly effective product, please go to Esri’s web site.


Leave a Reply