получить различный счетчик из массива каждой строки, используя pyspark - PullRequest
1 голос
/ 27 февраля 2020

Я ищу отдельные подсчеты из массива каждой строки, используя фрейм данных pyspark: input: col1 [1,1,1] [3,4,5] [1,2,1,2]

output:
1
3
2  

I used below code but it is giving me the length of an array:
output:
3
3
4

please help me how do i achieve this using python pyspark dataframe.

slen = udf(lambda s: len(s), IntegerType())
count = Df.withColumn("Count", slen(df.col1))
count.show()

Thanks in advanced !

1 Ответ

4 голосов
/ 28 февраля 2020

Для spark2.4 + вы можете использовать array_distinct, а затем просто получить его размер, чтобы получить количество различных значений в вашем массиве. Использование UDF будет очень медленным и неэффективным для больших данных, всегда старайтесь использовать встроенные функции spark.

https://spark.apache.org/docs/latest/api/python/pyspark.sql.html#pyspark. sql .functions.array_distinct

(добро пожаловать в SO)

df.show()

+------------+
|        col1|
+------------+
|   [1, 1, 1]|
|   [3, 4, 5]|
|[1, 2, 1, 2]|
+------------+

df.withColumn("count", F.size(F.array_distinct("col1"))).show()

+------------+-----+
|        col1|count|
+------------+-----+
|   [1, 1, 1]|    1|
|   [3, 4, 5]|    3|
|[1, 2, 1, 2]|    2|
+------------+-----+
...