Pyspark-基于列表或词汇表创建列

Pyspark-基于列表或词汇表创建列,pyspark,pyspark-dataframes,Pyspark,Pyspark Dataframes,我是Pyspark的新手,我有一个包含客户id和文本的数据框,其中包含一个关联的值 +------+-----+------+ |id |text |value | +------+-----+------+ | 1 | Cat| 5| | 1 | Dog| 4| | 2 | Oil| 1| 我想基于关键字列表分析文本列,并创建一列,告诉我关键字是否在文本字段中,并提取相关值,预期结果如下 List_keywords = ["D

我是Pyspark的新手,我有一个包含客户id和文本的数据框,其中包含一个关联的值

+------+-----+------+
|id    |text |value |
+------+-----+------+
|   1  |  Cat|     5|
|   1  |  Dog|     4|
|   2  |  Oil|     1|

我想基于关键字列表分析文本列,并创建一列,告诉我关键字是否在文本字段中,并提取相关值,预期结果如下

List_keywords = ["Dog", Cat"]
出去

最好的方法是什么?我想创建一个包含我的关键字的列表或词汇表,并用for循环对其进行解析,但我相信有更好的方法可以做到这一点


非常感谢

请查看解决方案

导入pyspark.sql.F函数
数据=[[1'猫',5],[1'狗',4],[2'油',3]]
df=spark.createDataFrame(数据,['id','text','value'])
df.show()
+---+----+-----+
|id |文本|值|
+---+----+-----+
|1类5类|
|1 |狗| 4|
|2 |油| 1|
+---+----+-----+
keywords=['Dog','Cat']
(
df
.groupby('id','text','value'))
.pivot('文本',关键字)
阿格先生(
F.计数('value')。别名('bool'),
F.max('value')。别名('value'))
)
.fillna(0)
.sort('文本')
).show()
+---+----+-----+--------+---------+--------+---------+
|id |文本|值|狗|狗|值|猫|猫|值|
+---+----+-----+--------+---------+--------+---------+
|1 | Cat | 5 | 0 | 0 | 1 | 5|
|1 |狗| 4 | 1 | 4 | 0 | 0|
|2 |石油| 1 | 0 | 0 | 0|
+---+----+-----+--------+---------+--------+---------+
+------+-----+------+--------+---------+--------+---------+
|id    |text |value |bool_Dog|value_Dog|bool_cat|value_cat|
+------+-----+------+--------+---------+--------+---------+
|   1  |  Cat|     5|0       |        0|       1|        5|
|   1  |  Dog|     4|1       |        4|       0|        0|
|   2  |  Oil|     1|0       |        0|       0|        0|