From ee74206444ce1544e79b79f96a2d4a0d546eda85 Mon Sep 17 00:00:00 2001 From: Zhenghua Gao Date: Wed, 29 May 2024 08:58:31 +0800 Subject: [PATCH] [SEDONA-559] Make the flink example work (#1420) * [hotfix] Enable scalastyle config * [SEDONA-559] Make the flink example project work * [hotfix] unbundle the example projects * [hotfix] fix example version in github ci/cd pipeline * [hotfix] Remove slf4j-api 1.7.36 from example parent because spark need slf4j-api 2.x * [hotfix] remove parent pom --- .github/workflows/example.yml | 4 +- .gitignore | 6 +- examples/flink-sql/pom.xml | 75 ++++++++++++------ .../flink-sql/src/main/java/FlinkExample.java | 19 +++-- .../src/main/resources/log4j2.properties | 25 ++++++ examples/spark-sql/colocationMap.png | Bin 41586 -> 0 bytes examples/spark-sql/pom.xml | 6 +- flink/pom.xml | 1 - pom.xml | 3 +- spark/pom.xml | 15 ---- .../maven/scalastyle_config.xml | 0 11 files changed, 99 insertions(+), 55 deletions(-) create mode 100644 examples/flink-sql/src/main/resources/log4j2.properties delete mode 100644 examples/spark-sql/colocationMap.png rename scalastyle_config.xml => tools/maven/scalastyle_config.xml (100%) diff --git a/.github/workflows/example.yml b/.github/workflows/example.yml index 3c0da74697..a0f11c119e 100644 --- a/.github/workflows/example.yml +++ b/.github/workflows/example.yml @@ -65,5 +65,5 @@ jobs: SPARK_VERSION: ${{ matrix.spark }} SPARK_COMPAT_VERSION: ${{ matrix.spark-compat }} SEDONA_VERSION: ${{ matrix.sedona }} - run: (cd examples/spark-sql;mvn clean install -Dspark.version=${SPARK_VERSION} -Dspark.compat.version=${SPARK_COMPAT_VERSION} -Dsedona.version=${SEDONA_VERSION};java -jar target/sedona-spark-example-1.0.0.jar) - - run: (cd examples/flink-sql;mvn clean install;java -jar target/sedona-flink-example-1.0.0.jar) + run: (cd examples/spark-sql;mvn clean install -Dspark.version=${SPARK_VERSION} -Dspark.compat.version=${SPARK_COMPAT_VERSION} -Dsedona.version=${SEDONA_VERSION};java -jar target/sedona-spark-example-1.6.0.jar) + - run: (cd examples/flink-sql;mvn clean install;java -jar target/sedona-flink-example-1.6.0.jar) diff --git a/.gitignore b/.gitignore index 955529bd74..991f92b826 100644 --- a/.gitignore +++ b/.gitignore @@ -1,12 +1,12 @@ -/target/ +target /.idea -/*.iml +*.iml /*.ipr /*.iws /.settings/ /.classpath /.project -/dependency-reduced-pom.xml +dependency-reduced-pom.xml /bin/ /doc/ /conf/ diff --git a/examples/flink-sql/pom.xml b/examples/flink-sql/pom.xml index 5ac89ed8be..2ea51d41d5 100644 --- a/examples/flink-sql/pom.xml +++ b/examples/flink-sql/pom.xml @@ -20,32 +20,28 @@ 4.0.0 + org.apache.sedona sedona-flink-example - 1.0.0 - + 1.6.0 + Sedona : Examples : Flink jar UTF-8 - 1.5.1-28.2 compile - 2.12 - 1.5.1 - 1.14.3 + 1.19.0 compile + 2.12 + 28.2 + 2.17.2 org.apache.sedona sedona-flink_${scala.compat.version} - ${sedona.version} - - - org.datasyslab - geotools-wrapper - ${geotools.version} + ${project.version} org.apache.flink @@ -56,28 +52,21 @@ org.apache.flink - flink-streaming-java_${scala.compat.version} - ${flink.version} - ${flink.scope} - - - - org.apache.flink - flink-connector-kafka_${scala.compat.version} + flink-streaming-java ${flink.version} ${flink.scope} org.apache.flink - flink-clients_${scala.compat.version} + flink-clients ${flink.version} ${flink.scope} org.apache.flink - flink-table-api-java-bridge_${scala.compat.version} + flink-table-api-java-bridge ${flink.version} ${flink.scope} @@ -100,10 +89,50 @@ ${flink.version} ${flink.scope} + + + + org.geotools + gt-referencing + ${geotools.version} + compile + + + + + + org.apache.logging.log4j + log4j-slf4j-impl + ${log4j.version} + compile + + + + org.apache.logging.log4j + log4j-api + ${log4j.version} + compile + + + + org.apache.logging.log4j + log4j-core + ${log4j.version} + compile + + + + + org.apache.logging.log4j + log4j-1.2-api + ${log4j.version} + compile + + org.apache.flink - flink-runtime-web_${scala.compat.version} + flink-runtime-web ${flink.version} test diff --git a/examples/flink-sql/src/main/java/FlinkExample.java b/examples/flink-sql/src/main/java/FlinkExample.java index d39c34b782..c59eb8125e 100644 --- a/examples/flink-sql/src/main/java/FlinkExample.java +++ b/examples/flink-sql/src/main/java/FlinkExample.java @@ -21,6 +21,7 @@ import org.apache.flink.table.api.EnvironmentSettings; import org.apache.flink.table.api.Table; import org.apache.flink.table.api.bridge.java.StreamTableEnvironment; + import org.apache.sedona.flink.SedonaFlinkRegistrator; import org.apache.sedona.flink.expressions.Constructors; @@ -43,17 +44,18 @@ public static void main(String[] args) { // Create a fake WKT string table source Table pointWktTable = Utils.createTextTable(env, tableEnv, Utils.createPointWKT(testDataSize), pointColNames); + // Create a geometry column - Table pointTable = pointWktTable.select(call(Constructors.ST_GeomFromWKT.class.getSimpleName(), - $(pointColNames[0])).as(pointColNames[0]), - $(pointColNames[1])); + Table pointTable = pointWktTable.select( + call("ST_GeomFromWKT", $(pointColNames[0])).as(pointColNames[0]), + $(pointColNames[1])); + // Create S2CellID pointTable = pointTable.select($(pointColNames[0]), $(pointColNames[1]), call("ST_S2CellIDs", $(pointColNames[0]), 6).as("s2id_array")); // Explode s2id array tableEnv.createTemporaryView("pointTable", pointTable); pointTable = tableEnv.sqlQuery("SELECT geom_point, name_point, s2id_point FROM pointTable CROSS JOIN UNNEST(pointTable.s2id_array) AS tmpTbl1(s2id_point)"); - pointTable.execute().print(); // Create a fake WKT string table source @@ -68,13 +70,16 @@ public static void main(String[] args) { // Explode s2id array tableEnv.createTemporaryView("polygonTable", polygonTable); polygonTable = tableEnv.sqlQuery("SELECT geom_polygon, name_polygon, s2id_polygon FROM polygonTable CROSS JOIN UNNEST(polygonTable.s2id_array) AS tmpTbl2(s2id_polygon)"); - polygonTable.execute().print(); + + // TODO: TableImpl.print() occurs EOF Exception due to https://issues.apache.org/jira/browse/FLINK-35406 + // Use polygonTable.execute().print() when FLINK-35406 is fixed. + polygonTable.execute().collect().forEachRemaining(row -> System.out.println(row)); // Join two tables by their S2 ids Table joinResult = pointTable.join(polygonTable).where($("s2id_point").isEqual($("s2id_polygon"))); // Optional: remove false positives - joinResult = joinResult.where("ST_Contains(geom_polygon, geom_point)"); - joinResult.execute().print(); + joinResult = joinResult.where(call("ST_Contains", $("geom_polygon"), $("geom_point"))); + joinResult.execute().collect().forEachRemaining(row -> System.out.println(row)); } } diff --git a/examples/flink-sql/src/main/resources/log4j2.properties b/examples/flink-sql/src/main/resources/log4j2.properties new file mode 100644 index 0000000000..9206863eda --- /dev/null +++ b/examples/flink-sql/src/main/resources/log4j2.properties @@ -0,0 +1,25 @@ +################################################################################ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +################################################################################ + +rootLogger.level = INFO +rootLogger.appenderRef.console.ref = ConsoleAppender + +appender.console.name = ConsoleAppender +appender.console.type = CONSOLE +appender.console.layout.type = PatternLayout +appender.console.layout.pattern = %d{yyyy-MM-dd HH:mm:ss,SSS} %-5p %-60c %x - %m%n diff --git a/examples/spark-sql/colocationMap.png b/examples/spark-sql/colocationMap.png deleted file mode 100644 index 3e065f648a0606dd00e4d6a030a3ca3503ae8654..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 41586 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�Pi?=`Qk1h8 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 diff --git a/examples/spark-sql/pom.xml b/examples/spark-sql/pom.xml index 7826d0c83a..903a88bf15 100644 --- a/examples/spark-sql/pom.xml +++ b/examples/spark-sql/pom.xml @@ -20,11 +20,11 @@ 4.0.0 + org.apache.sedona sedona-spark-example - 1.0.0 - - ${project.groupId}:${project.artifactId} + 1.6.0 + Sedona : Examples : Spark Maven Example for SedonaDB jar diff --git a/flink/pom.xml b/flink/pom.xml index 55b778be20..b823d5783c 100644 --- a/flink/pom.xml +++ b/flink/pom.xml @@ -34,7 +34,6 @@ ${skip.deploy.common.modules} - 1.19.0 provided diff --git a/pom.xml b/pom.xml index bb2c321151..6fb2545688 100644 --- a/pom.xml +++ b/pom.xml @@ -86,6 +86,7 @@ 3.0 2.17.2 + 1.19.0 1.7.36 2.0.0 4.1.1 @@ -525,7 +526,7 @@ false ${project.basedir}/src/main/scala ${project.basedir}/src/test/scala - ${project.basedir}/../scalastyle_config.xml + tools/maven/scalastyle_config.xml ${project.basedir}/target/scalastyle-output.xml UTF-8 diff --git a/spark/pom.xml b/spark/pom.xml index 09ece37ace..ac7750a2c5 100644 --- a/spark/pom.xml +++ b/spark/pom.xml @@ -107,19 +107,4 @@ - - - - - - org.scalastyle - scalastyle-maven-plugin - - ${project.basedir}/../../scalastyle_config.xml - - - - - - diff --git a/scalastyle_config.xml b/tools/maven/scalastyle_config.xml similarity index 100% rename from scalastyle_config.xml rename to tools/maven/scalastyle_config.xml