使用 pyspark 从每行的数组中获取不同的计数

get distinct count from an array of each rows using pyspark

我正在使用 pyspark 数据框从每行的数组中寻找不同的计数: 输入: 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 !

对于 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|
+------------+-----+