This is an automated email from the ASF dual-hosted git repository.
jiayu pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/sedona.git
The following commit(s) were added to refs/heads/master by this push:
new 2f4f9ddb6 [SEDONA-414] Make ST_MakeLine in sedona-spark work with
array inputs. (#1068)
2f4f9ddb6 is described below
commit 2f4f9ddb6f038938e25f3dbdcc948f6fd837d3b8
Author: Kristin Cowalcijk <[email protected]>
AuthorDate: Thu Nov 2 01:15:28 2023 +0800
[SEDONA-414] Make ST_MakeLine in sedona-spark work with array inputs.
(#1068)
---
.../src/test/java/org/apache/sedona/flink/FunctionTest.java | 4 ++++
.../apache/spark/sql/sedona_sql/expressions/Functions.scala | 2 +-
.../scala/org/apache/sedona/sql/dataFrameAPITestScala.scala | 4 ++++
.../test/scala/org/apache/sedona/sql/functionTestScala.scala | 12 ++++++++----
4 files changed, 17 insertions(+), 5 deletions(-)
diff --git a/flink/src/test/java/org/apache/sedona/flink/FunctionTest.java
b/flink/src/test/java/org/apache/sedona/flink/FunctionTest.java
index 411786369..7a098b403 100644
--- a/flink/src/test/java/org/apache/sedona/flink/FunctionTest.java
+++ b/flink/src/test/java/org/apache/sedona/flink/FunctionTest.java
@@ -794,6 +794,10 @@ public class FunctionTest extends TestBase{
table = table.select(call(Functions.ST_MakeLine.class.getSimpleName(),
$("point1"), $("point2")));
Geometry result = (Geometry) first(table).getField(0);
assertEquals("LINESTRING (0 0, 1 1)", result.toString());
+
+ table = tableEnv.sqlQuery("SELECT ST_MakeLine(ARRAY[ST_Point(2, 2),
ST_Point(3, 3)]) AS line");
+ result = (Geometry) first(table).getField(0);
+ assertEquals("LINESTRING (2 2, 3 3)", result.toString());
}
@Test
diff --git
a/spark/common/src/main/scala/org/apache/spark/sql/sedona_sql/expressions/Functions.scala
b/spark/common/src/main/scala/org/apache/spark/sql/sedona_sql/expressions/Functions.scala
index 5548343bb..30ae7a32c 100644
---
a/spark/common/src/main/scala/org/apache/spark/sql/sedona_sql/expressions/Functions.scala
+++
b/spark/common/src/main/scala/org/apache/spark/sql/sedona_sql/expressions/Functions.scala
@@ -687,7 +687,7 @@ case class ST_SubDivideExplode(children: Seq[Expression])
}
case class ST_MakeLine(inputExpressions: Seq[Expression])
- extends
InferredExpression(InferrableFunction.allowRightNull(Functions.makeLine _)) {
+ extends InferredExpression(inferrableFunction2(Functions.makeLine),
inferrableFunction1(Functions.makeLine)) {
protected def withNewChildrenInternal(newChildren: IndexedSeq[Expression]) =
{
copy(inputExpressions = newChildren)
diff --git
a/spark/common/src/test/scala/org/apache/sedona/sql/dataFrameAPITestScala.scala
b/spark/common/src/test/scala/org/apache/sedona/sql/dataFrameAPITestScala.scala
index 0e5d094db..b7b837698 100644
---
a/spark/common/src/test/scala/org/apache/sedona/sql/dataFrameAPITestScala.scala
+++
b/spark/common/src/test/scala/org/apache/sedona/sql/dataFrameAPITestScala.scala
@@ -314,6 +314,10 @@ class dataFrameAPITestScala extends TestBaseScala {
val actualResult = df.take(1)(0).get(0).asInstanceOf[Geometry].toText()
val expectedResult = "LINESTRING (0 0, 1 1)"
assert(actualResult == expectedResult)
+
+ val df2 = sparkSession.sql("SELECT ST_MakeLine(ARRAY(ST_Point(0, 0),
ST_Point(1, 1), ST_Point(2, 2)))")
+ val actualResult2 = df2.take(1)(0).get(0).asInstanceOf[Geometry].toText()
+ assert(actualResult2 == "LINESTRING (0 0, 1 1, 2 2)")
}
it("Passed ST_MakeValid On Invalid Polygon") {
diff --git
a/spark/common/src/test/scala/org/apache/sedona/sql/functionTestScala.scala
b/spark/common/src/test/scala/org/apache/sedona/sql/functionTestScala.scala
index 6e2c8e359..f7563beb9 100644
--- a/spark/common/src/test/scala/org/apache/sedona/sql/functionTestScala.scala
+++ b/spark/common/src/test/scala/org/apache/sedona/sql/functionTestScala.scala
@@ -322,11 +322,15 @@ class functionTestScala extends TestBaseScala with
Matchers with GeometrySample
}
it("Passed ST_MakeLine") {
-
- var testtable = sparkSession.sql(
- "SELECT ST_MakeLine(ST_GeomFromText('POINT(1 2)'),
ST_GeomFromText('POINT(3 4)'))"
+ val testtable = sparkSession.sql(
+ """SELECT
+ |ST_MakeLine(ST_GeomFromText('POINT(1 2)'), ST_GeomFromText('POINT(3
4)')),
+ |ST_MakeLine(ARRAY(ST_Point(5, 6), ST_Point(7, 8), ST_Point(9, 10)))
+ |""".stripMargin
)
-
assert(testtable.take(1)(0).get(0).asInstanceOf[Geometry].toText.equals("LINESTRING
(1 2, 3 4)"))
+ val row = testtable.take(1)(0)
+ assert(row.get(0).asInstanceOf[Geometry].toText.equals("LINESTRING (1 2,
3 4)"))
+ assert(row.get(1).asInstanceOf[Geometry].toText.equals("LINESTRING (5 6,
7 8, 9 10)"))
}
it("Passed ST_Polygon") {