2017-07-25 76 views
0

我有一个火花数据框df列“id”(字符串)和另一列“值”(字符串数组)。我想创建另一个名为count的列,其中包含每个id的值的计数。在pyspark计数

DF样子 -

id  values 
1fdf67 [dhjy1,jh87w3,89yt5re] 
df45l1 [hj098,hg45l0,sass65r4,dh6t21] 

结果应该 -

id  values       count 
1fdf67 [dhjy1,jh87w3,89yt5re]   3 
df45l1 [hj098,hg45l0,sass65r4,dh6t21] 4 

我想下面做 -

df= df.select(id,values).toDF(id,values,values.count()) 

这似乎并不奏效为我的要求。

+0

'values'不是一个变量,是吗?那么,'values.count()'会给你什么? –

+0

我想你正在寻找'withColumn()'函数。 –

回答

0

请使用size功能:

from pyspark.sql.functions import size 

df = spark.createDataFrame([ 
    ("1fdf67", ["dhjy1", "jh87w3", "89yt5re"]), 
    ("df45l1", ["hj098", "hg45l0", "sass65r4", "dh6t21"])], 
    ("id", "values")) 

df.select("*", size("values").alias("count")).show(2, False) 

+------+---------------------------------+-----+ 
|id |values       |count| 
+------+---------------------------------+-----+ 
|1fdf67|[dhjy1, jh87w3, 89yt5re]   |3 | 
|df45l1|[hj098, hg45l0, sass65r4, dh6t21]|4 | 
+------+---------------------------------+-----+