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

Jos*_*dez 10 python string apache-spark pyspark

我有一个包含字符串类型的列(“assigned_products”)的 Spark 数据框,其中包含如下值:

"POWER BI PRO+Power BI (free)+AUDIO CONFERENCING+OFFICE 365 ENTERPRISE E5 WITHOUT AUDIO CONFERENCING"
Run Code Online (Sandbox Code Playgroud)

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

我尝试了以下操作,但一直返回错误。

from pyspark.sql.functions import col
DF.withColumn('Number_Products_Assigned', col("assigned_products").count("+"))
Run Code Online (Sandbox Code Playgroud)

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

pau*_*ult 11

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

from pyspark.sql.functions import col, size, split
DF.withColumn('Number_Products_Assigned', size(split(col("assigned_products"), r"\+")) - 1)
Run Code Online (Sandbox Code Playgroud)

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

+--------------------+------------------------+
|   assigned_products|Number_Products_Assigned|
+--------------------+------------------------+
|POWER BI PRO+Powe...|                       3|
+--------------------+------------------------+
Run Code Online (Sandbox Code Playgroud)


Arn*_*-Oz 6

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")))
Run Code Online (Sandbox Code Playgroud)