Как посчитать количество каждой уникальной значения в DataFrame PySpark?
У меня есть столбец с инициалами штатов в виде строк. Моя задача заключается в том, чтобы подсчитать количество вхождений каждого штата в этом списке.
Например: (("TX":3),("NJ":2))
должен быть выводом, когда инициал "TX" встречается два раза, а "NJ" — дважды.
Я довольно новенький в pyspark, и эта задача вызывает у меня затруднения. Буду очень благодарен за помощь!
1 ответ(ов)
Вопрос: Как мне подсчитать наиболее часто встречающиеся значения в столбце DataFrame PySpark и показать результаты в определенном порядке?
Ответ:
Вы можете использовать следующий код на Python с библиотеками pandas
и pyspark
. Функция value_counts
принимает DataFrame PySpark и наименование столбца, в котором вы хотите подсчитать значения. Также вы можете задать порядок сортировки и количество отображаемых значений.
import pandas as pd
import pyspark.sql.functions as F
def value_counts(spark_df, colm, order=1, n=10):
"""
Подсчитывает топ n значений в заданном столбце и выводит в заданном порядке.
Параметры
----------
spark_df : pyspark.sql.dataframe.DataFrame
Данные
colm : string
Название столбца, в котором нужно подсчитать значения
order : int, default=1
1: сортировать по убыванию счетчиков значений, нулевые значения на верх
2: сортировать по возрастанию значений
3: сортировать по убыванию значений
4: выполнять 2 и 3 (объединить топ n и боттом n после сортировки столбца по возрастанию значений)
n : int, default=10
Количество значений, которые нужно отобразить
Возвращает
----------
Подсчеты значений в DataFrame pandas
"""
if order == 1:
return pd.DataFrame(spark_df.select(colm).groupBy(colm).count().orderBy(F.desc_nulls_first("count")).head(n), columns=["value", "count"])
if order == 2:
return pd.DataFrame(spark_df.select(colm).groupBy(colm).count().orderBy(F.asc(colm)).head(n), columns=["value", "count"])
if order == 3:
return pd.DataFrame(spark_df.select(colm).groupBy(colm).count().orderBy(F.desc(colm)).head(n), columns=["value", "count"])
if order == 4:
return pd.concat([
pd.DataFrame(spark_df.select(colm).groupBy(colm).count().orderBy(F.asc(colm)).head(n), columns=["value", "count"]),
pd.DataFrame(spark_df.select(colm).groupBy(colm).count().orderBy(F.desc(colm)).head(n), columns=["value", "count"])
])
Обратите внимание, что функция возвращает результаты в виде DataFrame pandas, что позволяет удобно работать с данными в дальнейшем. Кроме того, вы можете настраивать порядок сортировки по вашим потребностям.
Как изменить порядок столбцов в DataFrame?
Преобразование списка словарей в DataFrame pandas
Объединение двух столбцов текста в DataFrame pandas
Установить значение для конкретной ячейки в DataFrame pandas с использованием индекса
Выбор строки из pandas Series/DataFrame по целочисленному индексу