From bec77a2d0486b295d995d0eea0c9c3cea9c2a956 Mon Sep 17 00:00:00 2001 From: Otto Fajardo Date: Thu, 1 Jun 2023 16:23:27 +0200 Subject: [PATCH 1/2] adding num_rows to multiprocessing to allow reading xport, por and sav files without the number of rows in the metadata --- CITATION.cff | 2 +- README.md | 11 +- change_log.md | 4 + docs/_build/doctrees/environment.pickle | Bin 15982 -> 15995 bytes docs/_build/doctrees/index.doctree | Bin 254654 -> 260440 bytes docs/_build/html/.buildinfo | 2 +- .../html/_static/documentation_options.js | 2 +- docs/_build/html/genindex.html | 2 +- docs/_build/html/index.html | 18 +- docs/_build/html/py-modindex.html | 2 +- docs/_build/html/search.html | 2 +- docs/_build/html/searchindex.js | 2 +- docs/conf.py | 2 +- pyreadstat/__init__.py | 2 +- pyreadstat/pyreadstat.c | 2077 +++++++++-------- pyreadstat/pyreadstat.pyx | 39 +- setup.py | 2 +- tests/test_basic.py | 8 +- 18 files changed, 1177 insertions(+), 1000 deletions(-) diff --git a/CITATION.cff b/CITATION.cff index 3b9e84a..7c0139c 100644 --- a/CITATION.cff +++ b/CITATION.cff @@ -5,7 +5,7 @@ authors: given-names: "Otto" orcid: "https://orcid.org/0000-0002-3363-9287" title: "Pyreadstat" -version: 1.2.1 +version: 1.2.2 doi: 10.5281/zenodo.6612282 date-released: 2018-09-24 url: "https://github.com/Roche/pyreadstat" diff --git a/README.md b/README.md index 9829335..72d12d9 100644 --- a/README.md +++ b/README.md @@ -330,7 +330,8 @@ df, meta = pyreadstat.read_sas7bdat('/path/to/a/file.sas7bdat', usecols=["variab #### Reading files in parallel processes A challenge when reading large files is the time consumed in the operation. In order to alleviate this -pyreadstat provides a function "read_file_multiprocessing" to read a file in parallel processes using the python multiprocessing library. As it reads the whole file in one go you need to have enough RAM for the operation. If +pyreadstat provides a function "read\_file\_multiprocessing" to read a file in parallel processes using + the python multiprocessing library. As it reads the whole file in one go you need to have enough RAM for the operation. If that is not the case look at Reading rows in chunks (next section) Speed ups in the process will depend on a number of factors such as number of processes available, RAM, @@ -351,6 +352,11 @@ import multiprocessing num_processes = multiprocessing.cpu_count() ``` +**Notes for Xport, Por and some defective SAV files not having the number of rows in the metadata** +1. In all Xport, Por and some defective SAV files, the number of rows cannot be determined from the metadata. In such cases, + you can use the parameter num\_rows to be equal or larger to the number of rows in the dataset. This number can be obtained + reading the file without multiprocessing, reading in another application, etc. + **Notes for windows** 1. For this to work you must include a __name__ == "__main__" section in your script. See [this issue](#85) @@ -410,6 +416,9 @@ for df, meta in reader: # do some cool calculations here for the chunk ``` +**If using multiprocessing, please read the notes in the previous section regarding Xport, Por and some defective SAV files not +having the number of rows in the metadata** + **For Windows, please check the notes on the previous section reading files in parallel processes** #### Reading value labels diff --git a/change_log.md b/change_log.md index 6a70c4c..4a080ba 100644 --- a/change_log.md +++ b/change_log.md @@ -1,3 +1,7 @@ +# 1.2.1 (github, pypi and conda 2023.06.01) +* added num_rows to multiprocessing to allow processing of xport, por and + sav files not having the number of rows in the metadata. + # 1.2.1 (github, pypi and conda 2023.02.22) * Readstat source updated to version 1.1.9 * introduced recognition for pandas datatype datetime64[ns, UTC] and other datetime64 types when writing, diff --git a/docs/_build/doctrees/environment.pickle b/docs/_build/doctrees/environment.pickle index 61b86a258f9eacd0441b9ec8bb023445de8bc2e1..f2c69c60012b5ee284518db98757c02cfecdbeeb 100644 GIT binary patch delta 2865 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 JJ*e;M`ya6rE*t;= diff --git a/docs/_build/doctrees/index.doctree b/docs/_build/doctrees/index.doctree index a25b445c3193df22f83a35e9f2fb46b6f0296328..cc928101e88c97b2a8471917d42b8946be6384b7 100644 GIT binary patch delta 31348 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�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 E1B__S1ONa4 delta 27582 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 diff --git a/docs/_build/html/.buildinfo b/docs/_build/html/.buildinfo index d41041b..6cd41fe 100644 --- a/docs/_build/html/.buildinfo +++ b/docs/_build/html/.buildinfo @@ -1,4 +1,4 @@ # Sphinx build info version 1 # This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. -config: dc63e4405a0437fb9efe8c4f5ffb3848 +config: 321f78fa88a773e9f9ed9c32944f2233 tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/docs/_build/html/_static/documentation_options.js b/docs/_build/html/_static/documentation_options.js index 120e3ee..872f3fb 100644 --- a/docs/_build/html/_static/documentation_options.js +++ b/docs/_build/html/_static/documentation_options.js @@ -1,6 +1,6 @@ var DOCUMENTATION_OPTIONS = { URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'), - VERSION: '1.2.1', + VERSION: '1.2.2', LANGUAGE: 'None', COLLAPSE_INDEX: false, BUILDER: 'html', diff --git a/docs/_build/html/genindex.html b/docs/_build/html/genindex.html index 459099f..74b50f8 100644 --- a/docs/_build/html/genindex.html +++ b/docs/_build/html/genindex.html @@ -3,7 +3,7 @@ - Index — pyreadstat 1.2.1 documentation + Index — pyreadstat 1.2.2 documentation