使用 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 内置函数。
(欢迎来到 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|
+------------+-----+
我正在使用 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 内置函数。
(欢迎来到 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|
+------------+-----+