PySpark подсчитывает различные значения в одном или нескольких столбцах

[*]
При обработке данных в pyspark нам часто нужно найти количество различных значений в одном или нескольких столбцах в кадре данных pyspark. В этой статье мы обсудим, как подсчитывать различные значения в одном или нескольких столбцах в pyspark.
Pyspark подсчитывает строки в DataFrame
count()
Метод подсчитывает количество строк в кадре данных pyspark. Когда мы вызываем count()
метод для фрейма данных, он возвращает количество строк в фрейме данных, как показано ниже.
import pyspark.sql as ps
spark = ps.SparkSession.builder \
.master("local[*]") \
.appName("countdistinct_example") \
.getOrCreate()
dfs=spark.read.csv("sample_csv_file.csv",header=True)
print("The input dataframe is:")
dfs.show()
num_rows=dfs.count()
print("The number of rows in the dataframe are:")
print(num_rows)
spark.sparkContext.stop()
Выход:

The input dataframe is:
+-------+-----+-------+---------+
| Name|Maths|Physics|Chemistry|
+-------+-----+-------+---------+
| Aditya| 45| 89| 71|
| Chris| null| 85| 82|
| Joel| 45| 75| 87|
|Katrina| 49| 47| 83|
| Joel| 45| 75| 87|
| Agatha| 77| 76| 93|
| Sam| 99| 62| 95|
| Aditya| 65| 89| 71|
+-------+-----+-------+---------+
The number of rows in the dataframe are:
8
В этом примере мы сначала читаем CSV-файл в кадр данных pyspark. Затем мы воспользовались count()
метод, чтобы найти количество строк в кадре данных. Поскольку в данных восемь строк, count()
метод возвращает значение 8.
Подсчет различных строк в кадре данных PySpark
Чтобы подсчитать отдельные строки в кадре данных, мы сначала будем использовать distinct()
метод для выбора отдельных строк в кадре данных pyspark. Затем мы можем использовать count()
метод для подсчета уникальных строк в заданном фрейме данных, как показано в следующем примере.
import pyspark.sql as ps
spark = ps.SparkSession.builder \
.master("local[*]") \
.appName("countdistinct_example") \
.getOrCreate()
dfs=spark.read.csv("sample_csv_file.csv",header=True)
print("The input dataframe is:")
dfs.show()
num_rows=dfs.distinct().count()
print("The number of distinct rows in the dataframe are:")
print(num_rows)
spark.sparkContext.stop()
Выход:
The input dataframe is:
+-------+-----+-------+---------+
| Name|Maths|Physics|Chemistry|
+-------+-----+-------+---------+
| Aditya| 45| 89| 71|
| Chris| null| 85| 82|
| Joel| 45| 75| 87|
|Katrina| 49| 47| 83|
| Joel| 45| 75| 87|
| Agatha| 77| 76| 93|
| Sam| 99| 62| 95|
| Aditya| 65| 89| 71|
+-------+-----+-------+---------+
The number of distinct rows in the dataframe are:
7
Фрейм данных, который мы создаем с помощью CSV-файла, содержит повторяющиеся строки. Следовательно, когда мы вызываем distinct()
метод в кадре данных pyspark, повторяющиеся строки удаляются. После этого, когда мы вызываем count()
метод на выходе distinct()
метод, мы получаем количество различных строк в данном кадре данных pyspark.
Вместо distinct()
метод, вы также можете использовать метод dropDuplicates()
метод для подсчета отдельных строк в фрейме данных, как показано ниже.
import pyspark.sql as ps
spark = ps.SparkSession.builder \
.master("local[*]") \
.appName("countdistinct_example") \
.getOrCreate()
dfs=spark.read.csv("sample_csv_file.csv",header=True)
print("The input dataframe is:")
dfs.show()
num_rows=dfs.dropDuplicates().count()
print("The number of distinct rows in the dataframe are:")
print(num_rows)
spark.sparkContext.stop()
Выход:
The input dataframe is:
+-------+-----+-------+---------+
| Name|Maths|Physics|Chemistry|
+-------+-----+-------+---------+
| Aditya| 45| 89| 71|
| Chris| null| 85| 82|
| Joel| 45| 75| 87|
|Katrina| 49| 47| 83|
| Joel| 45| 75| 87|
| Agatha| 77| 76| 93|
| Sam| 99| 62| 95|
| Aditya| 65| 89| 71|
+-------+-----+-------+---------+
The number of distinct rows in the dataframe are:
7
dropDuplicates()
Метод при вызове в кадре данных pyspark удаляет все повторяющиеся строки. Следовательно, когда мы вызываем count()
метод в кадре данных, возвращенный dropDuplicates()
метод, мы получаем количество различных строк в фрейме данных.
Значения подсчета Pyspark в столбце
Чтобы подсчитать значения в столбце в кадре данных pyspark, мы можем использовать метод select()
метод и count()
метод. select()
Метод принимает имена столбцов в качестве входных данных и возвращает фрейм данных, содержащий указанные столбцы.
Чтобы подсчитать значения в столбце кадра данных pyspark, мы сначала выберем конкретный столбец, используя select()
метод, передав имя столбца в качестве входных данных для select()
метод.
Далее мы будем использовать count()
метод для подсчета количества значений в выбранном столбце, как показано в следующем примере.
import pyspark.sql as ps
spark = ps.SparkSession.builder \
.master("local[*]") \
.appName("countdistinct_example") \
.getOrCreate()
dfs=spark.read.csv("sample_csv_file.csv",header=True)
print("The input dataframe is:")
dfs.show()
num_rows=dfs.select("Name").count()
print("The number of values in the Name column are:")
print(num_rows)
spark.sparkContext.stop()
Выход:
The input dataframe is:
+-------+-----+-------+---------+
| Name|Maths|Physics|Chemistry|
+-------+-----+-------+---------+
| Aditya| 45| 89| 71|
| Chris| null| 85| 82|
| Joel| 45| 75| 87|
|Katrina| 49| 47| 83|
| Joel| 45| 75| 87|
| Agatha| 77| 76| 93|
| Sam| 99| 62| 95|
| Aditya| 65| 89| 71|
+-------+-----+-------+---------+
The number of values in the Name column are:
8
По умолчанию столбец будет иметь то же количество значений, что и строки в кадре данных. Следовательно, этот пример не имеет никакого смысла. Однако мы можем объединить select()
метод с distinct()
метод для подсчета различных значений в столбце в кадре данных pyspark.
Подсчет различных значений в столбце в PySpark DataFrame
Чтобы подсчитать различные значения в столбце в кадре данных pyspark, мы будем использовать следующие шаги.
- Во-первых, мы выберем конкретный столбец из фрейма данных, используя
select()
метод. - Далее мы будем использовать
distinct()
метод для получения столбца с различными значениями. - Наконец, мы будем использовать
count()
метод для подсчета различных значений в столбце.
Вы можете наблюдать это на следующем примере.
import pyspark.sql as ps
spark = ps.SparkSession.builder \
.master("local[*]") \
.appName("countdistinct_example") \
.getOrCreate()
dfs=spark.read.csv("sample_csv_file.csv",header=True)
print("The input dataframe is:")
dfs.show()
num_rows=dfs.select("Name").distinct().count()
print("The number of distinct values in the Name column are:")
print(num_rows)
spark.sparkContext.stop()
Выход:
The input dataframe is:
+-------+-----+-------+---------+
| Name|Maths|Physics|Chemistry|
+-------+-----+-------+---------+
| Aditya| 45| 89| 71|
| Chris| null| 85| 82|
| Joel| 45| 75| 87|
|Katrina| 49| 47| 83|
| Joel| 45| 75| 87|
| Agatha| 77| 76| 93|
| Sam| 99| 62| 95|
| Aditya| 65| 89| 71|
+-------+-----+-------+---------+
The number of distinct values in the Name column are:
6
В приведенном выше примере мы сначала выбрали столбец Name с помощью select()
метод. Затем мы воспользовались distinct()
метод для получения различных значений в Name
столбец. Наконец, мы использовали count()
метод для подсчета различных значений в указанном столбце.
Вместо distinct()
метод, вы также можете использовать метод dropDuplicates()
метод для подсчета различных значений в столбце, как показано ниже.
import pyspark.sql as ps
spark = ps.SparkSession.builder \
.master("local[*]") \
.appName("countdistinct_example") \
.getOrCreate()
dfs=spark.read.csv("sample_csv_file.csv",header=True)
print("The input dataframe is:")
dfs.show()
num_rows=dfs.select("Name").dropDuplicates().count()
print("The number of distinct values in the Name column are:")
print(num_rows)
spark.sparkContext.stop()
Выход:
The input dataframe is:
+-------+-----+-------+---------+
| Name|Maths|Physics|Chemistry|
+-------+-----+-------+---------+
| Aditya| 45| 89| 71|
| Chris| null| 85| 82|
| Joel| 45| 75| 87|
|Katrina| 49| 47| 83|
| Joel| 45| 75| 87|
| Agatha| 77| 76| 93|
| Sam| 99| 62| 95|
| Aditya| 65| 89| 71|
+-------+-----+-------+---------+
The number of distinct values in the Name column are:
6
PySpark подсчитывает несколько отдельных столбцов
Чтобы подсчитать количество различных значений в нескольких столбцах, мы будем использовать следующие шаги.
- Сначала мы выберем указанные столбцы с помощью
select()
метод. - Далее мы будем использовать
distinct()
метод, чтобы найтиdistinct()
пары значений в заданных столбцах. - Наконец, мы будем использовать
count()
метод для получения количества различных значений.
Вы можете наблюдать это на следующем примере.
import pyspark.sql as ps
spark = ps.SparkSession.builder \
.master("local[*]") \
.appName("countdistinct_example") \
.getOrCreate()
dfs=spark.read.csv("sample_csv_file.csv",header=True)
print("The input dataframe is:")
dfs.show()
num_rows=dfs.select("Name","Maths").distinct().count()
print("The number of distinct values in the Name and Maths column are:")
print(num_rows)
spark.sparkContext.stop()
Выход:
The input dataframe is:
+-------+-----+-------+---------+
| Name|Maths|Physics|Chemistry|
+-------+-----+-------+---------+
| Aditya| 45| 89| 71|
| Chris| null| 85| 82|
| Joel| 45| 75| 87|
|Katrina| 49| 47| 83|
| Joel| 45| 75| 87|
| Agatha| 77| 76| 93|
| Sam| 99| 62| 95|
| Aditya| 65| 89| 71|
+-------+-----+-------+---------+
The number of distinct values in the Name and Maths column are:
7
В этом примере мы подсчитали различные значения в Name
и Maths
столбец. Для этого мы сначала выделили оба этих столбца с помощью select()
метод. Далее мы использовали distinct()
метод удаления повторяющихся пар из обоих столбцов. Наконец, мы использовали count()
метод для подсчета различных значений в нескольких столбцах в данном кадре данных pyspark.
Вместо distinct()
метод, вы также можете использовать метод dropDuplicates()
метод в предыдущем подходе для подсчета различных значений в нескольких столбцах в кадре данных pyspark.
import pyspark.sql as ps
spark = ps.SparkSession.builder \
.master("local[*]") \
.appName("countdistinct_example") \
.getOrCreate()
dfs=spark.read.csv("sample_csv_file.csv",header=True)
print("The input dataframe is:")
dfs.show()
num_rows=dfs.select("Name","Maths").dropDuplicates().count()
print("The number of distinct values in the Name and Maths column are:")
print(num_rows)
spark.sparkContext.stop()
Выход:
The input dataframe is:
+-------+-----+-------+---------+
| Name|Maths|Physics|Chemistry|
+-------+-----+-------+---------+
| Aditya| 45| 89| 71|
| Chris| null| 85| 82|
| Joel| 45| 75| 87|
|Katrina| 49| 47| 83|
| Joel| 45| 75| 87|
| Agatha| 77| 76| 93|
| Sam| 99| 62| 95|
| Aditya| 65| 89| 71|
+-------+-----+-------+---------+
The number of distinct values in the Name and Maths column are:
7
В приведенном выше примере мы можем избежать использования оператора select при поиске различных счетчиков для нескольких столбцов. Мы можем напрямую вызывать dropDuplicates()
метод на исходном кадре данных для этого.
Здесь мы будем передавать имена столбцов, для которых мы хотим найти различные значения, в качестве входных данных для subset
параметр в dropDuplicates()
метод в списке. После этого мы получим исходный фрейм данных со всеми столбцами, но только уникальным набором значений в столбцах, переданных в dropDuplicates()
метод.
После получения кадра данных вы можете использовать count()
метод, чтобы найти количество различных значений в нескольких столбцах, как показано ниже.
import pyspark.sql as ps
from pyspark.sql.functions import col,countDistinct
spark = ps.SparkSession.builder \
.master("local[*]") \
.appName("countdistinct_example") \
.getOrCreate()
dfs=spark.read.csv("sample_csv_file.csv",header=True)
print("The input dataframe is:")
dfs.show()
num_rows=dfs.dropDuplicates(subset=["Name","Maths"]).count()
print("The number of distinct values in the Name and Maths column are:")
print(num_rows)
spark.sparkContext.stop()
Выход:
The input dataframe is:
+-------+-----+-------+---------+
| Name|Maths|Physics|Chemistry|
+-------+-----+-------+---------+
| Aditya| 45| 89| 71|
| Chris| null| 85| 82|
| Joel| 45| 75| 87|
|Katrina| 49| 47| 83|
| Joel| 45| 75| 87|
| Agatha| 77| 76| 93|
| Sam| 99| 62| 95|
| Aditya| 65| 89| 71|
+-------+-----+-------+---------+
The number of distinct values in the Name and Maths column are:
7
В выводе вы можете заметить, что мы получаем тот же результат, что и в предыдущем примере, даже если мы не использовали select()
заявление.
Подсчет уникальных значений в столбцах с помощью функции countDistinct()
countDistinct()
функция определена в модуле pyspark.sql.functions. Он часто используется с groupby()
метод для подсчета различных значений в разных подмножествах кадра данных pyspark. Однако мы также можем использовать countDistinct()
метод для подсчета различных значений в одном или нескольких столбцах.
Чтобы подсчитать количество различных значений в столбце в pyspark, используя countDistinct()
функцию, мы будем использовать функцию agg()
метод. Здесь мы пройдем countDistinct()
функции для agg()
метод в качестве входных данных. Кроме того, мы передадим имя столбца, поскольку мы хотим подсчитать различные значения в качестве входных данных для countDistinct()
функция. После выполнения agg()
метод, мы получаем кадр данных, содержащий количество уникальных значений в данном столбце. Вы можете наблюдать это на следующем примере.
import pyspark.sql as ps
from pyspark.sql.functions import col,countDistinct
spark = ps.SparkSession.builder \
.master("local[*]") \
.appName("countdistinct_example") \
.getOrCreate()
dfs=spark.read.csv("sample_csv_file.csv",header=True)
print("The input dataframe is:")
dfs.show()
count_df=dfs.agg(countDistinct("Name"))
print("The number of distinct values in the Name column are:")
count_df.show()
spark.sparkContext.stop()
Выход:
The input dataframe is:
+-------+-----+-------+---------+
| Name|Maths|Physics|Chemistry|
+-------+-----+-------+---------+
| Aditya| 45| 89| 71|
| Chris| null| 85| 82|
| Joel| 45| 75| 87|
|Katrina| 49| 47| 83|
| Joel| 45| 75| 87|
| Agatha| 77| 76| 93|
| Sam| 99| 62| 95|
| Aditya| 65| 89| 71|
+-------+-----+-------+---------+
The number of distinct values in the Name column are:
+-----------+
|count(Name)|
+-----------+
| 6|
+-----------+
Если вы хотите подсчитать уникальные значения в нескольких столбцах, используя countDistinct()
функцию, вы можете передать требуемые имена столбцов в countDistinct()
как показано ниже.
import pyspark.sql as ps
from pyspark.sql.functions import col,countDistinct
spark = ps.SparkSession.builder \
.master("local[*]") \
.appName("countdistinct_example") \
.getOrCreate()
dfs=spark.read.csv("sample_csv_file.csv",header=True)
print("The input dataframe is:")
dfs.show()
count_df=dfs.agg(countDistinct("Name","Maths"))
print("The number of distinct values in the Name and Maths column are:")
count_df.show()
spark.sparkContext.stop()
Выход:
The input dataframe is:
+-------+-----+-------+---------+
| Name|Maths|Physics|Chemistry|
+-------+-----+-------+---------+
| Aditya| 45| 89| 71|
| Chris| null| 85| 82|
| Joel| 45| 75| 87|
|Katrina| 49| 47| 83|
| Joel| 45| 75| 87|
| Agatha| 77| 76| 93|
| Sam| 99| 62| 95|
| Aditya| 65| 89| 71|
+-------+-----+-------+---------+
The number of distinct values in the Name and Maths column are:
+------------------+
|count(Name, Maths)|
+------------------+
| 6|
+------------------+
В этом выводе вы можете заметить, что countDistinct()
метод дает количество различных значений в Name
и Maths
столбцы как 6, тогда как предыдущий пример дал 7 в качестве вывода. Это связано с тем, что countDistinct()
метод игнорирует строки с нулевыми значениями.
Заключение
В этой статье мы обсудили различные способы подсчета различных значений в одном или нескольких столбцах в кадре данных pyspark. Чтобы узнать больше о pyspark, вы можете прочитать эту статью о том, как сортировать кадр данных pyspark. Вам также может понравиться эта статья о распаковке кортежей в Python.
Надеюсь, вам понравилось читать эту статью. Следите за информативными статьями.
Счастливого обучения!
Связанный
Рекомендуемое обучение Python
Курс: Python 3 для начинающих
Более 15 часов видеоконтента с инструкциями для начинающих. Узнайте, как создавать приложения для реального мира, и освойте основы.