我正在创建一个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
1条答案
按热度按时间ttcibm8c1#
所以,Pyspark 3.5使用的是Scala 2.12(除非你专门安装了Scala 2.13版本),而我使用的是为Scala 2.13构建的Sedona jar文件。
所以,为了澄清,当你下载sedona的时候,你会看到两个版本的scala的jar文件。确保你把正确的jar文件复制到你的
$SPARK_HOME/jars
目录。当你设置SparkSession的时候,你的python代码应该是这样的:不幸的是,我现在在运行一个ST_Intersects的SQL查询时得到了一个不同的错误.但是,我会问一个单独的问题,因为它似乎与Scala版本无关。