我的数据集看起来像这样,其中我有一个逗号分隔的字符串值集合在
基本上,我想做的是获取以逗号分隔的所有值,并在每个值及其计数后附加另一列。
我希望在col4中获得这种输出:
我已经弄清楚了如何将列连接起来以得到col3,但是在得到col4时遇到了一些困难。这是我停下来的地方,对接下来该怎么做有点不确定:
如何动态计算以逗号分隔的
col1
和col2
中。col3
是将这两列连接在一起的结果。+===========+========+=============
|col1 |col2 |col3
+===========+========+=============
|a,b,c,d |a,c,d |a,b,c,d,a,c,d
|e,f,g |f,g,h |e,f,g,f,g,h
+===========+========+=============
基本上,我想做的是获取以逗号分隔的所有值,并在每个值及其计数后附加另一列。
我希望在col4中获得这种输出:
+===========+========+==============+======================
|col1 |col2 |col3 |col4
+===========+========+==============+======================
|a,b,c,d |a,c,d |a,b,c,d,a,c,d |a: 2, b: 1, c: 2, d: 2
|e,f,g |f,g,h |e,f,g,f,g,h |e: 1, f: 2, g: 2, h: 1
+===========+========+==============+======================
我已经弄清楚了如何将列连接起来以得到col3,但是在得到col4时遇到了一些困难。这是我停下来的地方,对接下来该怎么做有点不确定:
from pyspark.sql.functions import concat, countDistinct
df = df.select(concat(df.col1, df.col2).alias('col3'), '*')
df.agg(countDistinct('col3')).show()
# +--------------------+
# |count(DISTINCT col3)|
# +--------------------+
# | 2|
# +--------------------+
如何动态计算以逗号分隔的
col3
中的子字符串,并在数据集的所有行中创建一个显示每个子字符串频率的最终列?