pyspark 获取Pysark DataFrame中单行中值的非重复计数

hrirmatl  于 2022-11-21  发布在  Spark
关注(0)|答案(1)|浏览(178)

我尝试将字符串列中以逗号分隔的值拆分为单独的值,并对每个单独的值进行计数。
我的数据格式如下:

+--------------------+
|                tags|
+--------------------+
|cult, horror, got...|
|            violence|
|            romantic|
|inspiring, romant...|
|cruelty, murder, ...|
|romantic, queer, ...|
|gothic, cruelty, ...|
|mystery, suspense...|
|            violence|
|revenge, neo noir...|
+--------------------+

我希望结果看起来像

+--------------------+-----+
|                tags|count|
+--------------------+-----+
|cult                |    4|
|horror              |   10|
|goth                |    4|
|violence            |   30|
...

我尝试过的代码没有工作如下:

data.select('tags').groupby('tags').count().show(10)

我还使用了一个countdistinct函数,它也无法工作。
我觉得我需要有一个函数,用逗号分隔值,然后列出它们,但不确定如何执行它们。

euoag5mw

euoag5mw1#

可以使用split()拆分字符串,然后使用explode(),最后使用groupby和count:

import pyspark.sql.functions as F

df = spark.createDataFrame(data=[
    ["cult,horror"],
    ["cult,comedy"],
    ["romantic,comedy"],
    ["thriler,horror,comedy"],
], schema=["tags"])

df = df \
  .withColumn("tags", F.split("tags", pattern=",")) \
  .withColumn("tags", F.explode("tags"))

df = df.groupBy("tags").count()

[Out]:
+--------+-----+
|tags    |count|
+--------+-----+
|romantic|1    |
|thriler |1    |
|horror  |2    |
|cult    |2    |
|comedy  |3    |
+--------+-----+

相关问题