我正在使用 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