在使用Apache Sedona的PySpark应用程序中运行SQL查询时收到“Scala.MatchError”,可能是由于版本不兼容造成的

g9icjywg  于 2023-10-23  发布在  Apache
关注(0)|答案(1)|浏览(197)

我正在创建一个PySpark应用程序来执行以下操作:

  • 从CSV文件读取点集合
  • 从CSV文件中读取多边形集合
  • 使用ST_Intersects运行SQL查询以确定它们的重叠位置

不幸的是,我得到了一个错误,看起来像这样:

Py4JJavaError: An error occurred while calling o1539.showString.
: org.apache.spark.SparkException: Job aborted due to stage failure: Task 56 in stage 255.0 failed 4 times, most recent failure: Lost task 56.3 in stage 255.0 (TID 874) (node5 executor 2): scala.MatchError: 40.74207644618617 (of class org.apache.spark.unsafe.types.UTF8String)
...
Caused by: scala.MatchError: 40.74207644618617 (of class org.apache.spark.unsafe.types.UTF8String)
    at org.apache.spark.sql.sedona_sql.expressions.ST_Point.eval(Constructors.scala:315)

经过大量的搜索,我能找到的最好的建议是,我使用的Spark,PySpark和Sedona的版本可能相互不兼容。我一直在尝试使用所有这些应用程序的最新版本:

  • Hadoop 3.3.6(所有节点)
  • Java JDK 11.0.1(这是Hadoop支持的最新版本)
  • Spark 3.5.0
  • Anaconda3-2023.09-0
  • PySpark 3.4.1
  • Apache Sedona 1.5
ttcibm8c

ttcibm8c1#

所以,Pyspark 3.5使用的是Scala 2.12(除非你专门安装了Scala 2.13版本),而我使用的是为Scala 2.13构建的Sedona jar文件。
所以,为了澄清,当你下载sedona的时候,你会看到两个版本的scala的jar文件。确保你把正确的jar文件复制到你的$SPARK_HOME/jars目录。当你设置SparkSession的时候,你的python代码应该是这样的:

.config('spark.jars.packages',
                    'org.apache.sedona:sedona-spark-shaded-3.4_2.12:1.5.0,' +
                    'org.datasyslab:geotools-wrapper:1.5.0-28.2'
                )

不幸的是,我现在在运行一个ST_Intersects的SQL查询时得到了一个不同的错误.但是,我会问一个单独的问题,因为它似乎与Scala版本无关。

相关问题