geopandas / dask-geopandas

Parallel GeoPandas with Dask
https://dask-geopandas.readthedocs.io/
BSD 3-Clause "New" or "Revised" License
486 stars 45 forks source link

Error when reading geoparquet file #270

Closed osjahputera closed 4 months ago

osjahputera commented 6 months ago

I am using a small geoparquet file below (33 MB ~ building footprints in Singapore (SGP)), but the intention is to process larger geoparquet files covering much larger countries.

https://data.source.coop/vida/google-microsoft-open-buildings/geoparquet/by_country/country_iso=SGP/SGP.parquet

I am getting this error when reading the SGP.parquet file using the following code:

import dask.dataframe
import dask
import dask_geopandas
import geopandas

ddf = dask_geopandas.read_parquet(path='SGP.parquet')
Error messages: ``` --------------------------------------------------------------------------- KeyError Traceback (most recent call last) File ~\anaconda3\envs\geo_env\Lib\site-packages\dask\backends.py:141, in CreationDispatch.register_inplace..decorator..wrapper(*args, **kwargs) 140 try: --> 141 return func(*args, **kwargs) 142 except Exception as e: File ~\anaconda3\envs\geo_env\Lib\site-packages\dask\dataframe\io\parquet\core.py:529, in read_parquet(path, columns, filters, categories, index, storage_options, engine, use_nullable_dtypes, dtype_backend, calculate_divisions, ignore_metadata_file, metadata_task_size, split_row_groups, blocksize, aggregate_files, parquet_file_extension, filesystem, **kwargs) 527 blocksize = None --> 529 read_metadata_result = engine.read_metadata( 530 fs, 531 paths, 532 categories=categories, 533 index=index, 534 use_nullable_dtypes=use_nullable_dtypes, 535 dtype_backend=dtype_backend, 536 gather_statistics=calculate_divisions, 537 filters=filters, 538 split_row_groups=split_row_groups, 539 blocksize=blocksize, 540 aggregate_files=aggregate_files, 541 ignore_metadata_file=ignore_metadata_file, 542 metadata_task_size=metadata_task_size, 543 parquet_file_extension=parquet_file_extension, 544 dataset=dataset_options, 545 read=read_options, 546 **other_options, 547 ) 549 # In the future, we may want to give the engine the 550 # option to return a dedicated element for `common_kwargs`. 551 # However, to avoid breaking the API, we just embed this 552 # data in the first element of `parts` for now. 553 # The logic below is inteded to handle backward and forward 554 # compatibility with a user-defined engine. File ~\anaconda3\envs\geo_env\Lib\site-packages\dask_geopandas\io\parquet.py:57, in GeoArrowEngine.read_metadata(cls, fs, paths, **kwargs) 55 @classmethod 56 def read_metadata(cls, fs, paths, **kwargs): ---> 57 meta, stats, parts, index = super().read_metadata(fs, paths, **kwargs) 59 gather_spatial_partitions = kwargs.pop("gather_spatial_partitions", True) File ~\anaconda3\envs\geo_env\Lib\site-packages\dask\dataframe\io\parquet\arrow.py:562, in ArrowDatasetEngine.read_metadata(cls, fs, paths, categories, index, use_nullable_dtypes, dtype_backend, gather_statistics, filters, split_row_groups, blocksize, aggregate_files, ignore_metadata_file, metadata_task_size, parquet_file_extension, **kwargs) 561 # Stage 2: Generate output `meta` --> 562 meta = cls._create_dd_meta(dataset_info) 564 # Stage 3: Generate parts and stats File ~\anaconda3\envs\geo_env\Lib\site-packages\dask_geopandas\io\parquet.py:103, in GeoArrowEngine._create_dd_meta(cls, dataset_info, use_nullable_dtypes) 99 raise ValueError( 100 "No dataset parts discovered. Use dask.dataframe.read_parquet " 101 "to read it as an empty DataFrame" 102 ) --> 103 meta = cls._update_meta(meta, schema) 104 return meta File ~\anaconda3\envs\geo_env\Lib\site-packages\dask_geopandas\io\parquet.py:77, in GeoArrowEngine._update_meta(cls, meta, schema) 74 """ 75 Convert meta to a GeoDataFrame and update with potential GEO metadata 76 """ ---> 77 return _update_meta_to_geodataframe(meta, schema.metadata) File ~\anaconda3\envs\geo_env\Lib\site-packages\dask_geopandas\io\arrow.py:36, in _update_meta_to_geodataframe(meta, schema_metadata) 35 geometry_column_name = geo_meta["primary_column"] ---> 36 crs = geo_meta["columns"][geometry_column_name]["crs"] 37 geometry_columns = geo_meta["columns"] KeyError: 'crs' The above exception was the direct cause of the following exception: KeyError Traceback (most recent call last) Cell In[3], line 1 ----> 1 ddf = dask_geopandas.read_parquet(path='SGP.parquet') File ~\anaconda3\envs\geo_env\Lib\site-packages\dask_geopandas\io\parquet.py:112, in read_parquet(*args, **kwargs) 111 def read_parquet(*args, **kwargs): --> 112 result = dd.read_parquet(*args, engine=GeoArrowEngine, **kwargs) 113 # check if spatial partitioning information was stored 114 spatial_partitions = result._meta.attrs.get("spatial_partitions", None) File ~\anaconda3\envs\geo_env\Lib\site-packages\dask\backends.py:143, in CreationDispatch.register_inplace..decorator..wrapper(*args, **kwargs) 141 return func(*args, **kwargs) 142 except Exception as e: --> 143 raise type(e)( 144 f"An error occurred while calling the {funcname(func)} " 145 f"method registered to the {self.backend} backend.\n" 146 f"Original Message: {e}" 147 ) from e KeyError: "An error occurred while calling the read_parquet method registered to the pandas backend.\nOriginal Message: 'crs'" ```

The original error message contains the string crs. Is there a problem in getting the coordinate reference system when reading geoparquet file from dask_geopandas?

The same SGP.parquet file can be read correctly using geopandas as follows:

df = geopandas.read_parquet('SGP.parquet')
df.head()
    geometry    boundary_id bf_source   confidence  area_in_meters
0   POLYGON ((103.86632 1.28342, 103.86632 1.28350...   189 microsoft   NaN 56.803640
1   POLYGON ((103.72272 1.21202, 103.72289 1.21201...   189 microsoft   NaN 173.367030
2   POLYGON ((103.72989 1.44070, 103.72988 1.44075...   189 microsoft   NaN 46.541618
3   POLYGON ((103.72365 1.28917, 103.72363 1.28925...   189 microsoft   NaN 40.895931
4   POLYGON ((103.90972 1.40250, 103.90968 1.40252...   189 microsoft   NaN 65.486328

The conda environment is built as follows:

conda create -n geo_env python==3.11.5
conda activate geo_env
conda install -c conda-forge pyarrow pygeos dask[complete] dask-geopandas contextily pyogrio notebook nb_conda_kernels

I initially built the conda env following the instruction provided in the README.md

conda create -n geo_env
conda activate geo_env
conda config --env --add channels conda-forge
conda config --env --set channel_priority strict
conda install dask-geopandas

However, this does not include pyarrow.parquet, thus the function geopandas.read_parquet() is not available.

The list of installed conda packages and versions. # Name Version Build Channel affine 2.4.0 pyhd8ed1ab_0 conda-forge anyio 4.3.0 pyhd8ed1ab_0 conda-forge argon2-cffi 23.1.0 pyhd8ed1ab_0 conda-forge argon2-cffi-bindings 21.2.0 py311ha68e1ae_4 conda-forge arrow 1.3.0 pyhd8ed1ab_0 conda-forge asttokens 2.4.1 pyhd8ed1ab_0 conda-forge async-lru 2.0.4 pyhd8ed1ab_0 conda-forge attrs 23.2.0 pyh71513ae_0 conda-forge aws-c-auth 0.7.16 h0a3593b_5 conda-forge aws-c-cal 0.6.10 hd481e46_1 conda-forge aws-c-common 0.9.13 hcfcfb64_0 conda-forge aws-c-compression 0.2.18 hd481e46_1 conda-forge aws-c-event-stream 0.4.2 h9555df4_3 conda-forge aws-c-http 0.8.1 h0b45682_4 conda-forge aws-c-io 0.14.4 h08270f9_2 conda-forge aws-c-mqtt 0.10.2 hababdb7_3 conda-forge aws-c-s3 0.5.1 h228a0d0_6 conda-forge aws-c-sdkutils 0.1.15 hd481e46_1 conda-forge aws-checksums 0.1.18 hd481e46_1 conda-forge aws-crt-cpp 0.26.2 hb1302ff_5 conda-forge aws-sdk-cpp 1.11.267 h93f5800_1 conda-forge babel 2.14.0 pyhd8ed1ab_0 conda-forge beautifulsoup4 4.12.3 pyha770c72_0 conda-forge bleach 6.1.0 pyhd8ed1ab_0 conda-forge blosc 1.21.5 hdccc3a2_0 conda-forge bokeh 3.3.4 pyhd8ed1ab_0 conda-forge boost-cpp 1.78.0 h9f4b32c_4 conda-forge brotli 1.1.0 hcfcfb64_1 conda-forge brotli-bin 1.1.0 hcfcfb64_1 conda-forge brotli-python 1.1.0 py311h12c1d0e_1 conda-forge bzip2 1.0.8 he774522_0 c-ares 1.26.0 hcfcfb64_0 conda-forge ca-certificates 2024.2.2 h56e8100_0 conda-forge cached-property 1.5.2 hd8ed1ab_1 conda-forge cached_property 1.5.2 pyha770c72_1 conda-forge cairo 1.16.0 hdecc03f_1016 conda-forge certifi 2024.2.2 pyhd8ed1ab_0 conda-forge cffi 1.16.0 py311ha68e1ae_0 conda-forge cfitsio 4.2.0 h9ebe7e4_0 conda-forge charset-normalizer 3.3.2 pyhd8ed1ab_0 conda-forge click 8.1.7 win_pyh7428d3b_0 conda-forge click-plugins 1.1.1 py_0 conda-forge cligj 0.7.2 pyhd8ed1ab_1 conda-forge cloudpickle 3.0.0 pyhd8ed1ab_0 conda-forge colorama 0.4.6 pyhd8ed1ab_0 conda-forge comm 0.2.1 pyhd8ed1ab_0 conda-forge contextily 1.5.0 pyhd8ed1ab_0 conda-forge contourpy 1.2.0 py311h005e61a_0 conda-forge curl 8.5.0 hd5e4a3a_0 conda-forge cycler 0.12.1 pyhd8ed1ab_0 conda-forge cytoolz 0.12.3 py311ha68e1ae_0 conda-forge dask 2024.2.0 pyhd8ed1ab_0 conda-forge dask-core 2024.2.0 pyhd8ed1ab_0 conda-forge dask-geopandas 0.3.1 pyhd8ed1ab_1 conda-forge debugpy 1.8.1 py311h12c1d0e_0 conda-forge decorator 5.1.1 pyhd8ed1ab_0 conda-forge defusedxml 0.7.1 pyhd8ed1ab_0 conda-forge distributed 2024.2.0 pyhd8ed1ab_0 conda-forge entrypoints 0.4 pyhd8ed1ab_0 conda-forge exceptiongroup 1.2.0 pyhd8ed1ab_2 conda-forge executing 2.0.1 pyhd8ed1ab_0 conda-forge expat 2.5.0 h63175ca_1 conda-forge font-ttf-dejavu-sans-mono 2.37 hab24e00_0 conda-forge font-ttf-inconsolata 3.000 h77eed37_0 conda-forge font-ttf-source-code-pro 2.038 h77eed37_0 conda-forge font-ttf-ubuntu 0.83 h77eed37_1 conda-forge fontconfig 2.14.2 hbde0cde_0 conda-forge fonts-conda-ecosystem 1 0 conda-forge fonts-conda-forge 1 0 conda-forge fonttools 4.49.0 py311ha68e1ae_0 conda-forge fqdn 1.5.1 pyhd8ed1ab_0 conda-forge freetype 2.12.1 hdaf720e_2 conda-forge freexl 1.0.6 h67ca5e6_1 conda-forge fsspec 2024.2.0 pyhca7485f_0 conda-forge gdal 3.7.0 py311h68c9619_3 conda-forge geographiclib 1.52 pyhd8ed1ab_0 conda-forge geopandas-base 0.14.3 pyha770c72_0 conda-forge geopy 2.4.1 pyhd8ed1ab_0 conda-forge geos 3.11.2 h1537add_0 conda-forge geotiff 1.7.1 h4e61e90_11 conda-forge gettext 0.21.1 h5728263_0 conda-forge h11 0.14.0 pyhd8ed1ab_0 conda-forge h2 4.1.0 pyhd8ed1ab_0 conda-forge hdf4 4.2.15 h1334946_6 conda-forge hdf5 1.14.1 nompi_h73e8ff5_100 conda-forge hpack 4.0.0 pyh9f0ad1d_0 conda-forge httpcore 1.0.4 pyhd8ed1ab_0 conda-forge httpx 0.27.0 pyhd8ed1ab_0 conda-forge hyperframe 6.0.1 pyhd8ed1ab_0 conda-forge icu 72.1 h63175ca_0 conda-forge idna 3.6 pyhd8ed1ab_0 conda-forge importlib-metadata 7.0.1 pyha770c72_0 conda-forge importlib_metadata 7.0.1 hd8ed1ab_0 conda-forge importlib_resources 6.1.1 pyhd8ed1ab_0 conda-forge intel-openmp 2024.0.0 h57928b3_49841 conda-forge ipykernel 6.29.2 pyha63f2e9_0 conda-forge ipython 8.21.0 pyh7428d3b_0 conda-forge isoduration 20.11.0 pyhd8ed1ab_0 conda-forge jedi 0.19.1 pyhd8ed1ab_0 conda-forge jinja2 3.1.3 pyhd8ed1ab_0 conda-forge joblib 1.3.2 pyhd8ed1ab_0 conda-forge json5 0.9.17 pyhd8ed1ab_0 conda-forge jsonpointer 2.4 py311h1ea47a8_3 conda-forge jsonschema 4.21.1 pyhd8ed1ab_0 conda-forge jsonschema-specifications 2023.12.1 pyhd8ed1ab_0 conda-forge jsonschema-with-format-nongpl 4.21.1 pyhd8ed1ab_0 conda-forge jupyter-lsp 2.2.2 pyhd8ed1ab_0 conda-forge jupyter_client 8.6.0 pyhd8ed1ab_0 conda-forge jupyter_core 5.7.1 py311h1ea47a8_0 conda-forge jupyter_events 0.9.0 pyhd8ed1ab_0 conda-forge jupyter_server 2.12.5 pyhd8ed1ab_0 conda-forge jupyter_server_terminals 0.5.2 pyhd8ed1ab_0 conda-forge jupyterlab 4.1.2 pyhd8ed1ab_0 conda-forge jupyterlab_pygments 0.3.0 pyhd8ed1ab_1 conda-forge jupyterlab_server 2.25.3 pyhd8ed1ab_0 conda-forge kealib 1.5.1 h96def13_4 conda-forge kiwisolver 1.4.5 py311h005e61a_1 conda-forge krb5 1.21.2 heb0366b_0 conda-forge lcms2 2.15 h3e3b177_1 conda-forge lerc 4.0.0 h63175ca_0 conda-forge libabseil 20230802.1 cxx17_h63175ca_0 conda-forge libaec 1.1.2 h63175ca_1 conda-forge libarchive 3.6.2 h6f8411a_1 conda-forge libarrow 15.0.0 h04ba218_5_cpu conda-forge libarrow-acero 15.0.0 h63175ca_5_cpu conda-forge libarrow-dataset 15.0.0 h63175ca_5_cpu conda-forge libarrow-flight 15.0.0 he112ba8_5_cpu conda-forge libarrow-flight-sql 15.0.0 h8f0bfdc_5_cpu conda-forge libarrow-gandiva 15.0.0 h41a35cd_5_cpu conda-forge libarrow-substrait 15.0.0 h7aa34db_5_cpu conda-forge libblas 3.9.0 21_win64_mkl conda-forge libbrotlicommon 1.1.0 hcfcfb64_1 conda-forge libbrotlidec 1.1.0 hcfcfb64_1 conda-forge libbrotlienc 1.1.0 hcfcfb64_1 conda-forge libcblas 3.9.0 21_win64_mkl conda-forge libcrc32c 1.1.2 h0e60522_0 conda-forge libcurl 8.5.0 hd5e4a3a_0 conda-forge libdeflate 1.18 hcfcfb64_0 conda-forge libevent 2.1.12 h3671451_1 conda-forge libexpat 2.5.0 h63175ca_1 conda-forge libffi 3.4.4 hd77b12b_0 libgdal 3.7.0 h123a834_3 conda-forge libglib 2.78.1 he8f3873_0 conda-forge libgoogle-cloud 2.17.0 h7ece6b4_2 conda-forge libgoogle-cloud-storage 2.17.0 hb581fae_2 conda-forge libgrpc 1.60.1 h0bf0bfa_0 conda-forge libhwloc 2.9.3 default_haede6df_1009 conda-forge libiconv 1.17 hcfcfb64_2 conda-forge libjpeg-turbo 2.1.5.1 hcfcfb64_1 conda-forge libkml 1.3.0 hd45a9bc_1016 conda-forge liblapack 3.9.0 21_win64_mkl conda-forge libnetcdf 4.9.2 nompi_h5902ca5_107 conda-forge libparquet 15.0.0 h7ec3a38_5_cpu conda-forge libpng 1.6.42 h19919ed_0 conda-forge libpq 15.6 h94c9ec1_0 conda-forge libprotobuf 4.25.1 hb8276f3_2 conda-forge libre2-11 2023.06.02 h8c5ae5e_0 conda-forge librttopo 1.1.0 he1da8c1_13 conda-forge libsodium 1.0.18 h8d14728_1 conda-forge libspatialite 5.0.1 hf8d749d_27 conda-forge libsqlite 3.45.1 hcfcfb64_0 conda-forge libssh2 1.11.0 h7dfc565_0 conda-forge libthrift 0.19.0 ha2b3283_1 conda-forge libtiff 4.5.1 h6c8260b_1 conda-forge libutf8proc 2.8.0 h82a8f57_0 conda-forge libwebp-base 1.3.2 hcfcfb64_0 conda-forge libxcb 1.15 hcd874cb_0 conda-forge libxml2 2.12.5 hc3477c8_0 conda-forge libzip 1.10.1 h1d365fa_3 conda-forge libzlib 1.2.13 hcfcfb64_5 conda-forge locket 1.0.0 pyhd8ed1ab_0 conda-forge lz4 4.3.3 py311haddf500_0 conda-forge lz4-c 1.9.4 hcfcfb64_0 conda-forge lzo 2.10 he774522_1000 conda-forge m2w64-gcc-libgfortran 5.3.0 6 conda-forge m2w64-gcc-libs 5.3.0 7 conda-forge m2w64-gcc-libs-core 5.3.0 7 conda-forge m2w64-gmp 6.1.0 2 conda-forge m2w64-libwinpthread-git 5.0.0.4634.697f757 2 conda-forge markupsafe 2.1.5 py311ha68e1ae_0 conda-forge matplotlib-base 3.8.3 py311h6e989c2_0 conda-forge matplotlib-inline 0.1.6 pyhd8ed1ab_0 conda-forge mercantile 1.2.1 pyhd8ed1ab_0 conda-forge mistune 3.0.2 pyhd8ed1ab_0 conda-forge mkl 2024.0.0 h66d3029_49657 conda-forge msgpack-python 1.0.7 py311h005e61a_0 conda-forge msys2-conda-epoch 20160418 1 conda-forge munkres 1.1.4 pyh9f0ad1d_0 conda-forge nb_conda_kernels 2.3.1 pyh7428d3b_4 conda-forge nbclient 0.8.0 pyhd8ed1ab_0 conda-forge nbconvert-core 7.16.1 pyhd8ed1ab_0 conda-forge nbformat 5.9.2 pyhd8ed1ab_0 conda-forge nest-asyncio 1.6.0 pyhd8ed1ab_0 conda-forge notebook 7.1.0 pyhd8ed1ab_0 conda-forge notebook-shim 0.2.4 pyhd8ed1ab_0 conda-forge numpy 1.26.4 py311h0b4df5a_0 conda-forge openjpeg 2.5.0 ha2aaf27_2 conda-forge openssl 3.2.1 hcfcfb64_0 conda-forge orc 1.9.2 hf6f83f4_1 conda-forge overrides 7.7.0 pyhd8ed1ab_0 conda-forge packaging 23.2 pyhd8ed1ab_0 conda-forge pandas 2.2.0 py311hf63dbb6_0 conda-forge pandocfilters 1.5.0 pyhd8ed1ab_0 conda-forge parso 0.8.3 pyhd8ed1ab_0 conda-forge partd 1.4.1 pyhd8ed1ab_0 conda-forge pcre2 10.40 h17e33f8_0 conda-forge pickleshare 0.7.5 py_1003 conda-forge pillow 10.0.0 py311hde623f7_0 conda-forge pip 23.3.1 py311haa95532_0 pixman 0.43.2 h63175ca_0 conda-forge pkgutil-resolve-name 1.3.10 pyhd8ed1ab_1 conda-forge platformdirs 4.2.0 pyhd8ed1ab_0 conda-forge poppler 23.05.0 h45d20d0_1 conda-forge poppler-data 0.4.12 hd8ed1ab_0 conda-forge postgresql 15.6 h94c9ec1_0 conda-forge proj 9.2.1 h660b3b0_0 conda-forge prometheus_client 0.20.0 pyhd8ed1ab_0 conda-forge prompt-toolkit 3.0.42 pyha770c72_0 conda-forge psutil 5.9.8 py311ha68e1ae_0 conda-forge pthread-stubs 0.4 hcd874cb_1001 conda-forge pthreads-win32 2.9.1 hfa6e2cd_3 conda-forge pure_eval 0.2.2 pyhd8ed1ab_0 conda-forge pyarrow 15.0.0 py311h6a6099b_5_cpu conda-forge pyarrow-hotfix 0.6 pyhd8ed1ab_0 conda-forge pycparser 2.21 pyhd8ed1ab_0 conda-forge pygeos 0.14 py311h343093d_1 conda-forge pygments 2.17.2 pyhd8ed1ab_0 conda-forge pyogrio 0.6.0 py311h03c997e_1 conda-forge pyparsing 3.1.1 pyhd8ed1ab_0 conda-forge pyproj 3.6.1 py311hcff2a09_0 conda-forge pysocks 1.7.1 pyh0701188_6 conda-forge python 3.11.5 he1021f5_0 python-dateutil 2.8.2 pyhd8ed1ab_0 conda-forge python-fastjsonschema 2.19.1 pyhd8ed1ab_0 conda-forge python-json-logger 2.0.7 pyhd8ed1ab_0 conda-forge python-tzdata 2024.1 pyhd8ed1ab_0 conda-forge python_abi 3.11 2_cp311 conda-forge pytz 2024.1 pyhd8ed1ab_0 conda-forge pywin32 306 py311h12c1d0e_2 conda-forge pywinpty 2.0.12 py311h12c1d0e_0 conda-forge pyyaml 6.0.1 py311ha68e1ae_1 conda-forge pyzmq 25.1.2 py311h9250fbb_0 conda-forge rasterio 1.3.8 py311h58bba51_0 conda-forge re2 2023.06.02 hcbb65ff_0 conda-forge referencing 0.33.0 pyhd8ed1ab_0 conda-forge requests 2.31.0 pyhd8ed1ab_0 conda-forge rfc3339-validator 0.1.4 pyhd8ed1ab_0 conda-forge rfc3986-validator 0.1.1 pyh9f0ad1d_0 conda-forge rpds-py 0.18.0 py311hc37eb10_0 conda-forge send2trash 1.8.2 pyh08f2357_0 conda-forge setuptools 68.2.2 py311haa95532_0 shapely 2.0.1 py311h343093d_1 conda-forge six 1.16.0 pyh6c4a22f_0 conda-forge snappy 1.1.10 hfb803bf_0 conda-forge sniffio 1.3.0 pyhd8ed1ab_0 conda-forge snuggs 1.4.7 py_0 conda-forge sortedcontainers 2.4.0 pyhd8ed1ab_0 conda-forge soupsieve 2.5 pyhd8ed1ab_1 conda-forge sqlite 3.41.2 h2bbff1b_0 stack_data 0.6.2 pyhd8ed1ab_0 conda-forge tbb 2021.11.0 h91493d7_1 conda-forge tblib 3.0.0 pyhd8ed1ab_0 conda-forge terminado 0.18.0 pyh5737063_0 conda-forge tiledb 2.13.2 h3132609_0 conda-forge tinycss2 1.2.1 pyhd8ed1ab_0 conda-forge tk 8.6.12 h2bbff1b_0 tomli 2.0.1 pyhd8ed1ab_0 conda-forge toolz 0.12.1 pyhd8ed1ab_0 conda-forge tornado 6.4 py311ha68e1ae_0 conda-forge traitlets 5.14.1 pyhd8ed1ab_0 conda-forge types-python-dateutil 2.8.19.20240106 pyhd8ed1ab_0 conda-forge typing-extensions 4.9.0 hd8ed1ab_0 conda-forge typing_extensions 4.9.0 pyha770c72_0 conda-forge typing_utils 0.1.0 pyhd8ed1ab_0 conda-forge tzdata 2023d h04d1e81_0 ucrt 10.0.22621.0 h57928b3_0 conda-forge uri-template 1.3.0 pyhd8ed1ab_0 conda-forge uriparser 0.9.7 h1537add_1 conda-forge urllib3 2.2.1 pyhd8ed1ab_0 conda-forge vc 14.2 h21ff451_1 vc14_runtime 14.38.33130 h82b7239_18 conda-forge vs2015_runtime 14.38.33130 hcb4865c_18 conda-forge wcwidth 0.2.13 pyhd8ed1ab_0 conda-forge webcolors 1.13 pyhd8ed1ab_0 conda-forge webencodings 0.5.1 pyhd8ed1ab_2 conda-forge websocket-client 1.7.0 pyhd8ed1ab_0 conda-forge wheel 0.41.2 py311haa95532_0 win_inet_pton 1.1.0 pyhd8ed1ab_6 conda-forge winpty 0.4.3 4 conda-forge xerces-c 3.2.5 h63175ca_0 conda-forge xorg-libxau 1.0.11 hcd874cb_0 conda-forge xorg-libxdmcp 1.1.3 hcd874cb_0 conda-forge xyzservices 2023.10.1 pyhd8ed1ab_0 conda-forge xz 5.4.5 h8cc25b3_0 yaml 0.2.5 h8ffe710_2 conda-forge zeromq 4.3.5 h63175ca_0 conda-forge zict 3.0.0 pyhd8ed1ab_0 conda-forge zipp 3.17.0 pyhd8ed1ab_0 conda-forge zlib 1.2.13 hcfcfb64_5 conda-forge zstd 1.5.5 h12be248_0 conda-forge
tschaub commented 5 months ago

@jorisvandenbossche - should this be updated to handle the absence of crs in column metadata? https://github.com/geopandas/dask-geopandas/blob/3489a1cbafbeda3c0d4493133112969268e58d66/dask_geopandas/io/arrow.py#L36

jorisvandenbossche commented 4 months ago

Apologies for the slow reply here. Thanks @osjahputera for the report! And @tschaub indeed we should not just assume the 'crs" key is present, thanks for the catch. Putting up a quick fix for this.

jorisvandenbossche commented 4 months ago

-> https://github.com/geopandas/dask-geopandas/pull/290