cancel
Showing results for 
Search instead for 
Did you mean: 
Community Platform Discussions
Connect with fellow community members to discuss general topics related to the Databricks platform, industry trends, and best practices. Share experiences, ask questions, and foster collaboration within the community.
cancel
Showing results for 
Search instead for 
Did you mean: 

SparkException: Job aborted due to stage failure when attempting to run grid_pointascellid

kll
New Contributor III

I am attempting to apply Mosaic's `grid_pointascellid` method on a spark dataframe with `lat`, `lon` columns.

```
import pyspark.sql.functions as F

# Create a Spark DataFrame with a lat and lon column
df = spark.createDataFrame([
("point1", 10.0, 20.0),
("point2", 30.0, 40.0),
("point3", 50.0, 60.0),
], ["name", "lat", "lon"])

# Print the results of the DataFrame
df.show()

df1 = df.withColumn("id", grid_pointascellid(st_point(df["lon"], df["lat"]), lit(7)))
df1.show()

```

The schema of the dataframe is:

```

|-- name: string (nullable = true)
|-- lat: decimal(9,6) (nullable = true)
|-- lng: decimal(9,6) (nullable = true)

```

Exception:


org.apache.spark.SparkException: Job aborted due to stage failure: Task 0 in stage 251.0 failed 4 times, most recent failure: Lost task 0.3 in stage 251.0 (TID 15016) (10.138.221.80 executor 50): java.lang.ClassCastException: org.apache.spark.sql.types.Decimal cannot be cast to java.lang.Double

https://databrickslabs.github.io/mosaic/api/spatial-indexing.html?highlight=grid_boundary#grid-point...

4 REPLIES 4

Lakshay
Esteemed Contributor

At which step are you getting the error? Also, can you share the code for "grid_pointascellid" function to understand what it is doing?

kll
New Contributor III

@Lakshay 

On this step, when I attempt to apply the method: 

```

df1 = df.withColumn("id", grid_pointascellid(st_point(df["lon"], df["lat"]), lit(7)))
df1.show()

```

Anonymous
Not applicable

Hi @kll 

Hope you are well. Just wanted to see if you were able to find an answer to your question and would you like to mark an answer as best? It would be really helpful for the other members too.

Cheers!

Tharun-Kumar
Honored Contributor II

@kll 

This error appears because the function grid_pointascellid expects a Double type column and a Decimal column type was provided as input.

To overcome this, before you apply the grid_pointascellid, I would recommend casting the columns lat and lon.

df1 = df.withColumn("lat", df["lat"].cast("double")).withColumn("lon", df["lon"].cast("double"))

df2 = df1.withColumn("id", grid_pointascellid(st_point(df1["lon"], df1["lat"]), lit(7)))
df2.show()

By performing this explicit cast before calling the mosaic functions, i was able to get the output below.

| name.   | lat.   | lon.   | id                                | 
|point1.   |10.0. |20.0.  |609880166050562047|
|point2.   |30.0  |40.0.  |609448747927076863|
|point3.   |50.0  |60.0.  |608566547836829695|

Connect with Databricks Users in Your Area

Join a Regional User Group to connect with local Databricks users. Events will be happening in your city, and you won’t want to miss the chance to attend and share knowledge.

If there isn’t a group near you, start one and help create a community that brings people together.

Request a New Group