Перейти к основному содержимому

ArchiveSpark

ArchiveSpark — Scala/Java-фреймворк, разработанный Internet Archive для распределённой обработки WARC/ARC на кластерах Apache Spark. Позволяет обрабатывать миллионы веб-захватов параллельно.

Когда использовать​

✅ Подходит, если:

  • у вас Hadoop/Spark-кластер и десятки терабайт WARC;
  • нужно дедуплицировать, индексировать, извлекать текст из больших коллекций;
  • нужны фильтры по MIME-типу, языку, статусу HTTP, причём на уровне распределённой обработки;
  • требуется интеграция с существующим Spark-пайплайном (DataFrames, MLib).

❌ Не подходит:

  • для небольших архивов (на порядки проще использовать metawarc или warchaeology на одной машине);
  • если не хочется разворачивать Spark-кластер;
  • для офлайн-обработки единичных WARC (лишние накладные расходы).

Установка​

Зависит от наличия Spark-кластера. Готовых бинарных релизов нет, собирается из исходников:

git clone https://github.com/internetarchive/archivespark.git
cd archivespark
sbt assembly

Использование​

Базовый пример​

import org.archive.archivespark.ArchiveSpark
import org.archive.archivespark.functions.partition.{CdxPartition, SparkPartition}
import org.archive.archivespark.suggest.ConcatenatedPrefixes

val archive = ArchiveSpark.load("hdfs:///data/warc/*.warc.gz")
val pages = archive.pages().filterByStatusCode(200)
val text = pages.flatMapValues(_.text.split("\\s+"))
val counts = text.countByValue()

Подсчёт статистики по доменам​

val byDomain = pages.mapValues(_.url.replaceAll("https?://([^/]+)/.*", "$1"))
.countByValue()

Преимущества​

  • Распределённость — горизонтальное масштабирование.
  • Богатство операторов — есть готовые фильтры, агрегации, экспорт в DataFrame.
  • Совместимость с экосистемой Spark — ML, GraphX, сторонние библиотеки.

Недостатки​

  • Сложность деплоя: требуется Java/Scala, spark-submit, настройки Hadoop.
  • Медленнее для разовых задач: на маленьких архивах проще DuckDB.
  • Слабая актуальная поддержка: проект Internet Archive развивает, но сообщество меньше, чем у Python-инструментов.

Связанные материалы​

  • Warchaeology — простые сканеры WARC.
  • metawarc — Python-вариант для больших архивов в DuckDB.
  • DuckDB-WARC — анализ WARC через SQL.

Источник​