如何使用pySpark转换项目行中的数组列单元以计算出现次数?

时间:2019-10-06 14:22:07

标签: arrays pyspark dataset transformation

我有一个数据集,该数据集的一列中有多个值,我想对数据集中所有行中每个值的所有出现次数进行计数。

initial dataset (example)
+----------------+
+ answers        +
+----------------+
+ val1#val2#val3 +
+ val2           +
+ val3#val5      +
+----------------+
Values are separated by #.

goal: 

+---------+-------+
+ values  + count +
+---------+-------+
+ val1    +  1    +
+ val2    +  2    +
+ val3    +  2    +
+ val5    +  1    +
+---------+-------+    

代码在pySpark中

我使用了split函数来获取值数组。

df.withColumn("new_col", F.split("answers", "\#").

我有一个带有数组列的数据集,但是找不到正确使用它的方法。

我寻找了许多可以帮助我的示例和函数,但我没有找到,而且由于pySpark数据集是不可变的,因此我没有找到变换数组和计算出现次数的方法。

1 个答案:

答案 0 :(得分:0)

您可以结合使用splitexplode来首先获取值列。

在其顶部应用groupBy将有助于实现所需的计数。

from pyspark.sql.functions import split, explode

df2 = df.withColumn("values", explode(split("answers", "\#")))

df2.groupBy("values").count().show()

输出:

+------+-----+
|values|count|
+------+-----+
|  val1|    1|
|  val3|    2|
|  val5|    1|
|  val2|    2|
+------+-----+