1

我正在使用 Spark 集群尝试 Databricks@Azure:Spark 3.0.0、Scala 2.12 在集群上(!)我安装了:geospark:1.3.1 geospark-sql_2.3:1.3.1 受https://databricks 启发。 com/notebooks/geospark-notebook.html 我喜欢 SQL 并希望运行 GeoSpark 查询。

我运行这个(从笔记本):

%scala

import com.vividsolutions.jts.geom.{Coordinate, Geometry, GeometryFactory}
import org.datasyslab.geospark.formatMapper.shapefileParser.ShapefileReader
import org.datasyslab.geospark.spatialRDD.SpatialRDD
import org.datasyslab.geosparksql.utils.{Adapter, GeoSparkSQLRegistrator}
GeoSparkSQLRegistrator.registerAll(sqlContext)

当我运行此检查时:

%scala 
import org.apache.spark.sql.SparkSession
val spark = SparkSession
  .builder()
  .appName("Spark SQL UDF scalar example")
  .getOrCreate()


spark.catalog.listFunctions().filter("name like 'ST%P%' ").show(false)


/** spark.catalog.listTables().show() 
spark.sql("SELECT ST_Point(0,0) FROM ( VALUES (42) ) AS t(a); ").show() */

输出是:

|name                       |database|description|className                                                                |isTemporary|

|ST_NPoints                 |null    |null       |org.apache.spark.sql.geosparksql.expressions.ST_NPoints$                 |true       |

|ST_Point                   |null    |null       |org.apache.spark.sql.geosparksql.expressions.ST_Point$                   |true       |

...

但是这个

    %sql
SELECT t.a, ST_Point(0,0) as p
FROM (VALUES (42)) AS t(a);

失败:

Error in SQL statement: NoClassDefFoundError: org/apache/spark/sql/catalyst/expressions/codegen/CodegenFallback$class

我做错了什么?

PS我也试过:

CREATE FUNCTION ST_Point AS 'org.apache.spark.sql.geosparksql.expressions.ST_Point$';

有和没有结束美元符号。创建函数语句返回 OK;但是运行包括 ST_point 的选择然后返回:

 Error in SQL statement: AnalysisException: No handler for UDF/UDAF/UDTF 'org.apache.spark.sql.geosparksql.expressions.ST_Point$'; line 1 pos 12
4

1 回答 1

1

geospark 1.3.1 似乎是为 Spark 2.x 构建的,请参阅 [1],如果您需要使用 Spark 3.x,请尝试升级到 geospark 1.3.2,否则尝试降级到 spark 2.x。

[1] http://sedona.apache.org/download/GeoSpark-All-Modules-Maven-Central-Coordinates/

于 2020-10-08T15:56:31.887 回答