python - 在 pyspark 数据框中添加 POS 词性列
问题描述
我正在使用 pyspark 或 nltk.pos_tag 在 pyspark 数据框中添加一列以查看单词是否为 NOUN、VERB、ADJ、ADV、ADP、PROPN
这是 pyspark 表。
------------------------
| event_dt | words |
------------------------
| 2020-09-02 | mifi |
| 2020-09-02 | hotspot |
| 2020-09-03 | service |
| 2020-09-03 | word |
| 2020-09-03 | plan |
两列都在继续。
这是我正在寻找使用 pyspark 的结果。
-------------------------------
| event_dt | words | pos |
-------------------------------
| 2020-09-02 | mifi | ADJ |
| 2020-09-02 | hotspot | ADJ |
| 2020-09-03 | service | ADJ |
| 2020-09-03 | word | NOUN |
| 2020-09-03 | plan | NOUN |
我不确定“单词”列中的单词在哪里进行比较以得到 ADJ、NOUN、PRONOUN 等的结果。
我在这里先向您的帮助表示感谢!
解决方案
处理这种情况的最好方法是使用which is nothing butwhen()
otherwise()
if else
一个先决条件:只需添加列表中的所有单词
在此处创建数据框
df = spark.createDataFrame([("2020-09-02","mifi"),("2020-09-02","hotspot"),("2020-09-02","service"),("2020-09-02","word"),("2020-09-02","plan")],["event_dt","word"])
df.show(truncate=False)
+----------+-------+
|event_dt |word |
+----------+-------+
|2020-09-02|mifi |
|2020-09-02|hotspot|
|2020-09-02|service|
|2020-09-02|word |
|2020-09-02|plan |
+----------+-------+
单词列表 whihc 是形容词 & when() else() 条件
adj = ["mifi", "hotspot","service"]
df = df.withColumn("pos", F.when(F.col("word").isin(adj), F.lit("ADJ")).otherwise(F.lit("NOUN")))
df.show(truncate=False)
最终输出
+----------+-------+----+
|event_dt |word |pos |
+----------+-------+----+
|2020-09-02|mifi |ADJ |
|2020-09-02|hotspot|ADJ |
|2020-09-02|service|ADJ |
|2020-09-02|word |NOUN|
|2020-09-02|plan |NOUN|
+----------+-------+----+
推荐阅读
- github - 从 GitHub 中删除无效的贡献者
- azure-data-factory - Azure 数据工厂 ForEach 似乎没有并行运行数据流
- php - WordPress 分页疑难解答
- json - IllegalArgumentException:尝试读取数据块中的 json 时,路径必须是绝对的
- javascript - webSocket.send() 没有在 react js 中执行?
- flutter - 将列表中的多个项目显示到 ftp 服务器 Flutter
- css - 使用tailwindcss在悬停时定位下一个兄弟
- java - 如何在 Java 的 Quarkus 框架中处理 MM(多对多)关系中的重复项?
- javascript - UnhandledPromiseRejectionWarning:在我运行服务器端的注册功能上
- ubuntu - 在 /usr/local/ 中找到了几个 cuda 目录