Published June 11, 2026 | Version 11.1.1

Compact representation of the OpenAIRE citation graph

  • 1. Czech Academy of Sciences, Institute of Computer Science

Description

When working with this dataset please cite to the accompanying article: Skarding, J. and Sanda, P. (2026) ‘Making the Complete OpenAIRE Citation Graph Easily Accessible Through Compact Data Representation’, Journal of Open Humanities Data, 12(1), p. 63. Available at: https://doi.org/10.5334/johd.520.

Based on the OpenAIRE Graph, v11.1.1 (source dump on Zenodo). Also available on Hugging Face.

 

We're making available a distilled version of the OpenAIRE citation graph. We share the complete graph as two files totalling ~11GB. We also provide a larger file including additonal publication fields (see table below). For complete description see the data paper at .

 

There are three data files each served in two formats; the TSV (Tab-Separated Values) and Parquet :

  • publications.tsv.xz and publications.parquet - The nodes in the citation graph, and their primary doi.
  • citations.tsv.xz and citations.parquet - The edges in the citation graph
  • publication_large.tsv.xz and publications_large.parquet - The nodes, but with several additional fields. 
  • pipeline.tar.xz - The pyspark pipeline used to produce the other files. Contains a singularity/apptainer container for reproducability and portability. The code is also found at Codeberg.

All files are compressed (.xz or .parquet) files.

 

Memory efficient loading of the Parquet files using Pandas

For memory efficient loading of the citation.parquet and publications.parquet in loading, use the PyArrow backend:

import pandas as pd

df_pubs = pd.read_parquet(
    "publications.parquet",
    engine="pyarrow",
    dtype_backend="pyarrow",
)

df_cites = pd.read_parquet(
    "citations.parquet",
    engine="pyarrow",
    dtype_backend="pyarrow",
)

The large publications file e.g. publications_large.parquet, will not fit inside memory on most machines. It is however simple to select a subset of coloumns, and only load those. 

df_large = pd.read_parquet(
    "publications_large.parquet",
    columns=["nodeId", "title", "pid_dois"],
    engine="pyarrow",
    dtype_backend="pyarrow",
)

Here, the nodeId, title, and pid_dois columns are selected. 

 

The fields in the publication_large:

 

Field Type Explanation Memory usage (GB) Percentage of filled fields
nodeId int32 Unique internal identifier for the node (publication) 0.8 100.00%
openaireId str Identifier assigned by the OpenAIRE platform 10.1 100.00%
title str Title of the publication 17.3 99.40%
authors list[str] List of authors associated with the publication 11.6 83.78%
description str Abstract or short description of the publication 137.6 57.10%
date datetime Date when the publication was published 0.8 97.33%
container str Journal, conference, or repository where it was published 5.7 68.35%
citations int Number of times the publication has been cited 1.6 97.62%
language str Language in which the publication is written 1.5 100.00%
pid_dois list[str] DOI identifiers 5.9 80.60%
pid_mag_ids list[str] MAG IDs 2.0 39.50%
pid_pmids list[str] PubMed IDs 1.3 18.14%
pid_handles list[str] Persistent handles 1.2 8.35%
pid_pmcs list[str] PubMed Central IDs 1.0 4.78%
pid_arxiv_ids list[str] ArXiv IDs 0.9 1.38%

Memory usage is the size the column takes up in memory, when loaded into a panda using the code snippets below. The percentage of filled fields shows the amount of non-null entries in each column.

Files

Files (144.7 GB)

Name Size
md5:b9e05bb509a35da374987f7bcc7324e5
9.2 GB Download
md5:b4e0eb5270ab76858e09803c7c3cfd03
9.7 GB Download
md5:84f4ce5887d8af5af57bcb859878e167
1.7 GB Download
md5:3f2741c39d5913cfc05c8128fdeab9ca
2.0 GB Download
md5:4c6de5387d89de52415ee96b70f0e127
1.1 GB Download
md5:afdc95001732cc5bce62a313aa504efd
75.5 GB Download
md5:9e46a2e825874e30e52a54f0a9b603a7
45.4 GB Download
md5:3b71efb5dc8b2ccdee7457c43bc27f03
8.4 kB Download