首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Spark Dataframe - Python -计算字符串中的子字符串

Spark Dataframe - Python -计算字符串中的子字符串
EN

Stack Overflow用户
提问于 2018-07-21 04:36:01
回答 2查看 8.1K关注 0票数 11

我有一个Spark dataframe,它有一个字符串类型的列("assigned_products"),它包含如下值:

代码语言:javascript
复制
"POWER BI PRO+Power BI (free)+AUDIO CONFERENCING+OFFICE 365 ENTERPRISE E5 WITHOUT AUDIO CONFERENCING"

我想计算"+"在字符串中的出现次数,并在一个新列中返回该值。

我尝试了以下方法,但一直返回错误。

代码语言:javascript
复制
from pyspark.sql.functions import col
DF.withColumn('Number_Products_Assigned', col("assigned_products").count("+"))

我正在运行Apache Spark 2.3.1的集群上的Azure Databricks中运行我的代码。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-07-21 04:57:26

这是一个非udf解决方案。在尝试计数的字符上拆分字符串,所需的值是结果数组的长度减去1:

代码语言:javascript
复制
from pyspark.sql.functions import col, size, split
DF.withColumn('Number_Products_Assigned', size(split(col("assigned_products"), r"\+")) - 1)

您必须转义+,因为它是一个特殊的正则表达式字符。

代码语言:javascript
复制
+--------------------+------------------------+
|   assigned_products|Number_Products_Assigned|
+--------------------+------------------------+
|POWER BI PRO+Powe...|                       3|
+--------------------+------------------------+
票数 11
EN

Stack Overflow用户

发布于 2018-07-21 04:43:06

代码语言:javascript
复制
from pyspark.sql.functions import col,udf

@udf(returnType='int')
def cnt(s):
    return s.count('+')

DF.withColumn('Number_Products_Assigned', cnt(col("assigned_products")))
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51450004

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档