我正在尝试Databricks@Azure和spark集群: Spark 3.0.0,Scala 2.12 On the cluster(!)我安装了: GeoSpark :1.3.1geospark- SQL _2.3:1.3.1受https://databricks.com/notebooks/geospark-notebook.html的启发我喜欢SQL并且想运行GeoSpark查询。
我运行以下代码(从Notebook):
%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我到底做错了什么?
附言:我还试过:
CREATE FUNCTION ST_Point AS 'org.apache.spark.sql.geosparksql.expressions.ST_Point$';带和不带结尾的美元符号。create function语句返回OK;但是,运行select including 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发布于 2020-10-08 23:56:32
geospark 1.3.1似乎是为Spark 2.x构建的,请参见1,如果您需要使用Spark 3.x,请尝试升级到geospark 1.3.2,否则请尝试降级到spark 2.x。
1
https://stackoverflow.com/questions/64168682
复制相似问题