Парсинг JSON-логов в плоскую таблицу

easy data_engineering Общие

Условие задания

**Компания:** ВК

**Контекст:** Бэкенд пишет логи в формате JSON Lines (по одному JSON-объекту на строку). Логи имеют вложенную структуру. Нужно распарсить их в плоскую таблицу для аналитики.

**Пример строки лога:**
[см. код в задании]

**Задание:**
1. Напишите функцию, которая читает JSON Lines файл и возвращает плоский DataFrame
2. Обработайте ситуации: битый JSON, отсутствующие поля
3. Добавьте столбец с датой (без времени) для партиционирования

Пример данных

Структура для ориентира — реальные значения из эталонного решения.

import json
import pandas as pd
from pathlib import Path

def parse_json_logs(filepath: str) -> tuple[pd.DataFrame, dict]:
    """Парсинг JSON Lines логов в плоский DataFrame."""
    records = []
    errors = {'parse_errors': 0, 'lines': []}

    with open(filepath, 'r') as f:
        for line_num, line in enumerate(f, 1):
            line = line.strip()
            if not line:
                continue
            try:
                record = json.loads(line)
                records.append(record)
            except json.JSONDecodeError:
                errors['parse_errors'] += 1
                errors['lines'].append(line_num)

    if not records:
        return pd.DataFrame(), errors

    # Развернуть вложенные объекты
    df = pd.json_normalize(records, sep='_')

    # Переименовать столбцы для удобства
    rename_map = {
        'user_id': 'user_id',
        'user_platform': 'platform',
        'params_page': 'page',
        'params_load_time_ms': 'load_time_ms',
    }
    df = df.rename(columns=rename_map)

    # Добавить столбец даты для партиционирования
    df['ts'] = pd.to_datetime(df['ts'])
    df['dt'] = df['ts'].dt.date

    stats = {
        'total_lines': len(records) + errors['parse_errors'],
        'parsed': len(records),
        'parse_errors': errors['parse_errors'],
        'columns': list(df.columns),
    }

    return df, stats

Темы

JSON парсинг логи pandas flatten

Подсказки

Все тестовые задания →

Частые вопросы

Какой уровень знаний нужен для задачи "Парсинг JSON-логов в плоскую таблицу"?

Это задание для уровня easy. Senior-уровень — глубокое понимание темы, опыт решения нестандартных задач, обсуждение trade-off на собеседовании.

На каких собеседованиях встречается такая задача?

Подобные задания в категории «data_engineering» регулярно дают на собеседованиях аналитика данных в Яндекс, Сбер, Ozon, Авито, Тинькофф, Wildberries, T-Bank, X5, ВТБ и других крупных IT-компаниях. Тематика: JSON, парсинг, логи, pandas, flatten.

Сколько времени даётся на решение?

На реальном собеседовании на подобную задачу отводится 30-60 минут с обсуждением подходов, оптимизаций и trade-off. Для тренировки рекомендуем сначала решить самостоятельно, потом сверить с эталонным решением и подсказками.

Где ещё потренироваться по теме «data_engineering»?

На zasqlpython.ru есть другие задания в категории «data_engineering», продуктовые кейсы, справочник метрик, AI мок-собеседование с разбором ваших ответов.

← Все задания