Как преобразовать ячейки столбцов массива в строки элементов для подсчета вхождений с помощью pySpark? - PullRequest
0 голосов
/ 06 октября 2019

У меня есть набор данных с несколькими значениями в одном столбце, и я хотел бы подсчитать все вхождения каждого значения во всех строках набора данных.

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 голосов
/ 06 октября 2019

Вы можете использовать комбинацию 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|
+------+-----+
...