gpt4 book ai didi

java - 使用 Spark/java 的 ST_geomfromtext 函数

转载 作者:行者123 更新时间:2023-12-04 09:31:18 25 4
gpt4 key购买 nike

由于 ST_GeomFromText 不是 org.apache.spark.sql.functions 的一部分,所以它不会在内部识别它。我需要首先为这个函数定义 UDF。意味着我需要定义该函数的定义,然后使用 spark 将该函数注册为 UDF,然后我才能使用该函数。
我在开始定义这个函数时陷入困境,需要什么参数。
编辑
我使用的代码如下:

 sparkSession.udf().register("ST_GeomFromText", new UDF1<String, String>() {
@Override
public String call(String txt ) {
return (new ST_GeomFromText(txt));
}
}, DataTypes.StringType);
我真的需要你的帮助。
谢谢

最佳答案

类似的问题——

  • GeoSpark librairy using Spark Java
  • From ResultSet to Spark dataframe using Java
  • GeoSpark using Spark / Java
  • Undefined function: 'ST_GeomFromText' Using Spark / Java

  • 我想,你还没有关注 GeoSparkSQL-Overview/#quick-start彻底——
  • 根据快速入门,您需要将 GeoSpark-core 和 GeoSparkSQL 添加到您的项目 POM.xml 或 build.sbt 中。
  • <!-- Geo spark lib doc - https://datasystemslab.github.io/GeoSpark/api/sql/GeoSparkSQL-Overview/#quick-start-->
    <dependency>
    <groupId>org.datasyslab</groupId>
    <artifactId>geospark-sql_2.3</artifactId>
    <version>1.3.1</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/com.vividsolutions/jts -->
    <dependency>
    <groupId>com.vividsolutions</groupId>
    <artifactId>jts</artifactId>
    <version>1.13</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.datasyslab/geospark-viz -->
    <dependency>
    <groupId>org.datasyslab</groupId>
    <artifactId>geospark-viz_2.3</artifactId>
    <version>1.3.1</version>
    </dependency>
    <dependency>
    <groupId>org.datasyslab</groupId>
    <artifactId>geospark</artifactId>
    <version>1.3.1</version>
    </dependency>
  • 声明您的 Spark session

  • SparkSession sparkSession = SparkSession.builder()
    .config("spark.serializer", KryoSerializer.class.getName())
    .config("spark.kryo.registrator", GeoSparkKryoRegistrator.class.getName())
    .master("local[*]")
    .appName("myGeoSparkSQLdemo")
    .getOrCreate();
  • geospark-sql_2.3 注册所有函数到 sparkSession这样就可以直接使用spark-sql

  • // register all functions from geospark-sql_2.3 to sparkSession
    GeoSparkSQLRegistrator.registerAll(sparkSession);
    现在这是工作示例-
       SparkSession sparkSession = SparkSession.builder()
    .config("spark.serializer", KryoSerializer.class.getName())
    .config("spark.kryo.registrator", GeoSparkKryoRegistrator.class.getName())
    .master("local[*]")
    .appName("myGeoSparkSQLdemo")
    .getOrCreate();

    // register all functions from geospark-sql_2.3 to sparkSession
    GeoSparkSQLRegistrator.registerAll(sparkSession);
    try {
    System.out.println(sparkSession.catalog().getFunction("ST_Geomfromtext"));
    // Function[name='ST_GeomFromText', className='org.apache.spark.sql.geosparksql.expressions.ST_GeomFromText$', isTemporary='true']
    } catch (Exception e) {
    e.printStackTrace();
    }
    // https://datasystemslab.github.io/GeoSpark/api/sql/GeoSparkSQL-Function/
    Dataset<Row> dataframe = sparkSession.sql("select ST_GeomFromText('POINT(-7.07378166 33.826661)')");
    dataframe.show(false);
    dataframe.printSchema();
    /**
    * +---------------------------------------------+
    * |st_geomfromtext(POINT(-7.07378166 33.826661))|
    * +---------------------------------------------+
    * |POINT (-7.07378166 33.826661) |
    * +---------------------------------------------+
    */

    // using longitude and latitude column from existing dataframe
    Dataset<Row> df = sparkSession.sql("select -7.07378166 as longitude, 33.826661 as latitude");
    df.withColumn("ST_Geomfromtext ",
    expr("ST_GeomFromText(CONCAT('POINT(',longitude,' ',latitude,')'))"))
    .show(false);
    /**
    * +-----------+---------+-----------------------------+
    * |longitude |latitude |ST_Geomfromtext |
    * +-----------+---------+-----------------------------+
    * |-7.07378166|33.826661|POINT (-7.07378166 33.826661)|
    * +-----------+---------+-----------------------------+
    */

    关于java - 使用 Spark/java 的 ST_geomfromtext 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62830434/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com