Pyspark 在Dataframe中拆分文本并检查是否包含子字符串

Pyspark 在Dataframe中拆分文本并检查是否包含子字符串,pyspark,Pyspark,因此,我想检查我的文本是否包含“baby”一词,而不是任何其他包含“baby”的词。例如,“五月宝贝”就不是一对。我已经有了一段有效的代码,但我想看看是否有更好的格式化方法,这样我就不必对数据进行两次检查。以下是我迄今为止所做的: 导入pyspark.sql.F函数 行=sc.parallelize(['14-香蕉'],['12-奶酪'],['13-橄榄'],['11-杏仁'],['23-五月宝贝'],['54-宝贝'])) rows\u df=rows.toDF([“ID”]) split=F

因此,我想检查我的文本是否包含“baby”一词,而不是任何其他包含“baby”的词。例如,“五月宝贝”就不是一对。我已经有了一段有效的代码,但我想看看是否有更好的格式化方法,这样我就不必对数据进行两次检查。以下是我迄今为止所做的:

导入pyspark.sql.F函数
行=sc.parallelize(['14-香蕉'],['12-奶酪'],['13-橄榄'],['11-杏仁'],['23-五月宝贝'],['54-宝贝']))
rows\u df=rows.toDF([“ID”])
split=F.split(行_df.ID,'-')
rows_df=rows_df.with column('fruit',split)
+----------+-------------+
|ID |水果|
+----------+-------------+
|14香蕉|[14,香蕉]|
|12奶酪|[12,奶酪]|
|13个橄榄|
|11杏仁[11,杏仁]|
|五月二十三日五月二十三日|
|54宝贝|[54,宝贝]|
+----------+-------------+
从pyspark.sql.types导入StringType
def func(col):
对于列中的项目:
如果项目==“婴儿”:
返回“是”
返回“否”
func_udf=udf(func,StringType())
df_hierachy_concept=行_df.with column('new',func_udf(行_df['fruit']))
+----------+-------------+---+
|ID |水果|新|
+----------+-------------+---+
|香蕉不|
|12奶酪|[12,奶酪]|不|
|13个橄榄不|
|11颗杏仁没有|
|五月二十三日五月二十三日不|
|宝贝|[54,宝贝]|是的|
+----------+-------------+---+

最后,我只想要“ID”和“new”列

我将展示两种解决方法。可能还有很多其他方法可以达到同样的结果

请参见以下示例:

来自pyspark.shell导入sc
从pyspark.sql.functions导入拆分,当
行=sc.parallelize(
[
['14-香蕉],['12-奶酪],['13-橄榄],
['11-杏仁'],['23-五月宝贝'],['54-宝贝']
]
)
#使用名为“fruit”的辅助列进行解析
rows\u df=rows.toDF([“ID”])
rows_df=rows_df.with column('fruit',split(rows_df.ID',-')[1])
rows_df=rows_df.with column('new',when(rows_df.fruit='baby','yes')。否则('no'))
rows\u df=rows\u df.drop('水果')
行_df.show()
#直接解析而不创建辅助列
rows\u df=rows.toDF([“ID”])
rows\u df=rows\u df.withColumn(
"新",,
当(拆分(行_df.ID,'-')[1]='baby','yes')。否则('no'))
)
行_df.show()
#解析时不强制执行'split()[1]`调用,避免索引外异常
rows\u df=rows.toDF([“ID”])
is_new_udf=udf(lambda列:如果有,则为“yes”(列中的值为“baby”),否则为“no”)
rows_df=rows_df.withColumn('new',is_new_udf(拆分(rows_df.ID,'-'))
行_df.show()
所有输出均相同:

+----------+---+
|        ID|new|
+----------+---+
| 14-banana| no|
| 12-cheese| no|
| 13-olives| no|
|11-almonds| no|
|23-maybaby| no|
|   54-baby|yes|
+----------+---+
我会用这个。如果您能够提取两侧都有单词边界的单词
“baby”
,则将列
new
等于
“yes”
,否则为
“no”

从pyspark.sql.functions导入regexp\u extract时 行和列( "新",, 什么时候( regexp_摘录(“ID”,”(?)?