Dataframe 如何在数字pyspark或NLP之间进行分割

Dataframe 如何在数字pyspark或NLP之间进行分割,dataframe,apache-spark,pyspark,nlp,Dataframe,Apache Spark,Pyspark,Nlp,我想在数据帧的一列中进行多重拆分。 例如: 我如何获得: s = ['Cras', 'mattis', 'MP', 'the', '69661', '69662', '69663', 'IS4567' ] 感谢您使用SparkSQL的内置函数和[Flatte()需要spark 2.4.0+]: Apache Hive文档中的内容: 将自然语言文本字符串标记为单词和句子,其中每个句子在适当的句子边界处断开,并作为单词数组返回。“lang”和“locale”是可选参数。例如,句子(‘你好!你好吗?

我想在数据帧的一列中进行多重拆分。 例如:

我如何获得:

s = ['Cras', 'mattis', 'MP', 'the', '69661', '69662', '69663', 'IS4567' ]

感谢您使用SparkSQL的内置函数和[Flatte()需要spark 2.4.0+]:

Apache Hive文档中的内容:

将自然语言文本字符串标记为单词和句子,其中每个句子在适当的句子边界处断开,并作为单词数组返回。“lang”和“locale”是可选参数。例如,句子(‘你好!你好吗?’)返回(‘你好’、‘你好’、‘你好’、‘你好’、‘你’)

您可以使用采用正则表达式模式分割数据的函数

import pyspark.sql.functions as f

df.withColumn('ns', f.split('s', "[^a-zA-Z0-9']+")).show(10,False)
+---------------------------------------------+----------------------------------------------------+
|s                                            |ns                                                  |
+---------------------------------------------+----------------------------------------------------+
|Cras mattis MP the -69661/69662;69663 /IS4567|[Cras, mattis, MP, the, 69661, 69662, 69663, IS4567]|
+---------------------------------------------+----------------------------------------------------+


注意:
“[^a-zA-Z0-9']+”
将处理基本的英文字符,但如果您想包含特殊字符,可以使用通用的
\p{L}
而不是像
“[^\\p{L}0-9']+”

语句不是
pyspark.sql.function
的一部分?我们可以不使用select而使用它吗?@PIG,您可以始终使用带有dataFrame API的
pyspark.sql.functions.expr
运行SparkSQL。
from pyspark.sql.functions import expr

df.withColumn('new_s', expr('flatten(sentences(s))')).show(truncate=False)    
#+---------------------------------------------+----------------------------------------------------+
#|s                                            |new_s                                               |
#+---------------------------------------------+----------------------------------------------------+
#|Cras mattis MP the -69661/69662;69663 /IS4567|[Cras, mattis, MP, the, 69661, 69662, 69663, IS4567]|
#+---------------------------------------------+----------------------------------------------------+
import pyspark.sql.functions as f

df.withColumn('ns', f.split('s', "[^a-zA-Z0-9']+")).show(10,False)
+---------------------------------------------+----------------------------------------------------+
|s                                            |ns                                                  |
+---------------------------------------------+----------------------------------------------------+
|Cras mattis MP the -69661/69662;69663 /IS4567|[Cras, mattis, MP, the, 69661, 69662, 69663, IS4567]|
+---------------------------------------------+----------------------------------------------------+