我有一个数据集,该数据集的一列中有多个值,我想对数据集中所有行中每个值的所有出现次数进行计数。
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数据集是不可变的,因此我没有找到变换数组和计算出现次数的方法。
答案 0 :(得分:0)
您可以结合使用split
和explode
来首先获取值列。
在其顶部应用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|
+------+-----+