Hi devs,
I'm working on getting Apache Sedona upgraded to work with Spark 3.2, and
ran into a weird issue I wanted to get some feedback on. The PR and current
discussion can be found here:
https://github.com/apache/incubator-sedona/pull/557
To try to sum up in a quick way, this library defines custom expressions
and registers the expressions using
sparkSession.sessionState.functionRegistry.registerFunction. One of the
unit tests is now failing because the function can't be found when a
temporary view using that function is created in pure SQL.
Examples:
This fails with Undefined function: 'ST_PolygonFromEnvelope'. This function
is neither a registered temporary function nor a permanent function
registered in the database 'default'.:
spark.sql(
"""
|CREATE OR REPLACE TEMP VIEW pixels AS
|SELECT pixel, shape FROM pointtable
|LATERAL VIEW EXPLODE(ST_Pixelize(shape, 1000, 1000,
ST_PolygonFromEnvelope(-126.790180,24.863836,-64.630926,50.000))) AS
pixel
""".stripMargin)
// Test visualization partitioner
val zoomLevel = 2
val newDf = VizPartitioner(spark.table("pixels"), zoomLevel,
"pixel", new Envelope(0, 1000, 0, 1000))
But both of these work fine:
val table = spark.sql(
"""
|SELECT pixel, shape FROM pointtable
|LATERAL VIEW EXPLODE(ST_Pixelize(shape, 1000, 1000,
ST_PolygonFromEnvelope(-126.790180,24.863836,-64.630926,50.000))) AS
pixel
""".stripMargin)
// Test visualization partitioner
val zoomLevel = 2
val newDf = VizPartitioner(table, zoomLevel, "pixel", new
Envelope(0, 1000, 0, 1000))
val table = spark.sql(
"""
|SELECT pixel, shape FROM pointtable
|LATERAL VIEW EXPLODE(ST_Pixelize(shape, 1000, 1000,
ST_PolygonFromEnvelope(-126.790180,24.863836,-64.630926,50.000))) AS
pixel
""".stripMargin)
table.createOrReplaceTempView("pixels")
// Test visualization partitioner
val zoomLevel = 2
val newDf = VizPartitioner(spark.table("pixels"), zoomLevel,
"pixel", new Envelope(0, 1000, 0, 1000))
So the main question is, is this a feature or a bug?
--
Adam Binford