Apache spark 如何用单个逗号替换多个逗号并计算Pyspark数据帧每行中的字数?

Apache spark 如何用单个逗号替换多个逗号并计算Pyspark数据帧每行中的字数?,apache-spark,pyspark,apache-spark-sql,pyspark-dataframes,Apache Spark,Pyspark,Apache Spark Sql,Pyspark Dataframes,我有一个庞大的数据集,每行都有一些标题,它们之间用,隔开。我想做两件事: 1-删除,,如果它们后面紧跟在一起 2-计算,之间的字数 例如,考虑以下两行: column hello, I am wondering/low,,, Going/hi, towards,, Host winter, summer,, 预期产出: column count hello, I am wondering/

我有一个庞大的数据集,每行都有一些标题,它们之间用
隔开。我想做两件事:

1-删除
,如果它们后面紧跟在一起

2-计算
之间的字数

例如,考虑以下两行:

      column
hello, I am wondering/low,,, Going/hi, towards,, Host
winter, summer,,  
预期产出:

      column                                        count
hello, I am wondering/low, Going/hi, towards, Host    5
winter, summer,                                       2
1-删除
,如果它们后面紧跟在一起

使用正则表达式使用函数将多个逗号替换为单个逗号。您可以使用regex
,{2,}
,这意味着2个或更多的逗号

2-计算
之间的字数

正如链接的另一个问题中所指出的,您需要简单地拆分这些值并获得数组的大小。但在这里,值的末尾可以有逗号,因此
size
将大于实际单词。为此,必须首先使用数组来消除空字符串

from pyspark.sql.functions import regexp_replace, expr

data = [
    ("hello, I am wondering / low,,, Going / hi, towards,, Host",),
    ("winter, summer,,",)
]

df = spark.createDataFrame(data, ["column"])

df1 = df.withColumn("column", regexp_replace("column", ",{2,}", ",")) \
    .withColumn("count",
                expr("size(filter(split(column, ','), x -> nullif(x, '') is not null))")
                )

df1.show(truncate=False)

#+------------------------------------------------------+-----+
#|column                                                |count|
#+------------------------------------------------------+-----+
#|hello, I am wondering / low, Going / hi, towards, Host|5    |
#|winter, summer,                                       |2    |
#+------------------------------------------------------+-----+

这回答了你的问题吗?是的,如果我有
,我想用
分开单词,而不是空格。然后,当我有
时,会出现问题使用
拆分而不是空格,并用单个逗号替换多个逗号。我不确定我有多少个逗号。所以用替换是不可能的work@mck是否有任何代码表明,如果有多个
,然后彼此删除并保留一个?为什么只给我计数列?