0

我一直在尝试将 GeoPandas 数据框转换为 PySpark 数据框,但没有成功。目前,我已经扩展了 DataFrame 类以将 GPD DF 转换为 Spark DF,如下所示:

from pyspark.sql import DataFrame
from pyspark.sql.types import IntegerType, StringType, FloatType, BooleanType, DateType, TimestampType, StructField, StructType
!pip install geospark
from geospark.sql.types import GeometryType

class SPandas(DataFrame):
  def __init__(self, sqlC, objgpd):
    esquema = dict(objgpd.dtypes)
    equivalencias = {'int64' : IntegerType, 'object' : StringType, 'float64' : FloatType, 
                     'bool' : BooleanType, 'datetime64' : DateType,
                     'timedelta' : TimestampType, 'geometry' : GeometryType}

    for clave, valor in esquema.items():
      try:
        esquema[clave] = equivalencias[str(valor)]
      except KeyError:
        esquema[clave] = StringType

    esquema = StructType([ StructField(v, esquema[v](), False) for v in esquema.keys() ])
    datos = sqlC.createDataFrame(objgpd, schema=esquema)
    super(self.__class__, self).__init__(datos._jdf, datos.sql_ctx)

前面的代码编译没有错误,但是当尝试从 DataFrame 中“获取”一个项目时,我收到以下错误:

fp = "Paralela/Barrios/Barrios.shp"
map_df = gpd.read_file(fp)
mapa_sp = SPandas(sqlC, map_df)
mapa_sp.take(1)

Py4JJavaError: An error occurred while calling o21.applySchemaToPythonRDD.
: java.lang.ClassNotFoundException: org.apache.spark.sql.geosparksql.UDT.GeometryUDT

问题在于 GDP DF 的“几何”列,因为没有它它可以完美运行。'geometry' 列具有 Shapely Polygon 对象,这些对象应被 GeoSpark 的 GeometryType 类识别。

有没有办法安装 org.apache.spark.sql.geosparksql.UDT.GeometryUDT?我正在使用谷歌 Colab。

4

1 回答 1

1

您需要在小时项目中包含 geospark 依赖项并将 jar 添加到您的运行时环境。类路径。以下版本的 jar 兼容spark-core_2.11:2.3.0

<dependency>
    <groupId>org.datasyslab</groupId>
    <artifactId>geospark</artifactId>
    <version>1.3.1</version>
    <scope>provided</scope>
</dependency>
于 2020-06-15T10:29:23.400 回答