Как собрать несколько метрик с помощью наблюдения в PySpark, не запуская несколько действийPython

Программы на Python
Anonymous
 Как собрать несколько метрик с помощью наблюдения в PySpark, не запуская несколько действий

Сообщение Anonymous »

У меня есть задание PySpark, которое считывает данные из таблицы a, выполняет некоторые преобразования и фильтры, а затем записывает результат в таблицу b.
Вот упрощенная версия кода:

Код: Выделить всё

import pyspark.sql.functions as F

spark = ...  # initialization

df = spark.table("a").where(F.col("country") == "abc")
df_unique = df.distinct()
users_without_kids = df_unique.where(F.col("kid_count") == 0)

observation = Observation()
observed_df = users_without_kids.observe(observation, F.count(F.lit(1)).alias("row_count"))

observed_df.writeTo("b")
print(observation.get["row_count"])
Это прекрасно работает — я получаю количество записей, записанных в таблицу b.
Однако мне также хотелось бы знать:
  • Сколько записей осталось сразу после первого фильтра ()
  • Сколько записей осталось после Different() (

    Код: Выделить всё

    df_unique
    )
Но я бы хотел избежать запуска дополнительных действий (например, не вызывать .count() несколько раз) — в идеале я хотел бы собрать все метрики в одном действии (writeTo).
Я пробовал добавлять несколько вызовов наблюдения или добавлять несколько метрик к одному наблюдению, но, похоже, это не работает когда в конце есть только одно действие.
Вопрос:
Есть ли в PySpark способ наблюдать за несколькими кадрами данных (или несколькими метриками) в одном действии, чтобы я мог фиксировать эти счетчики (, df_unique иusers_without_kids) без выполнения дополнительных заданий?

Подробнее здесь: https://stackoverflow.com/questions/797 ... ring-multi

Вернуться в «Python»