【问题标题】:How replace multiple commas by single comma and count words in each line of a Pyspark DataFrame?如何用单个逗号替换多个逗号并计算 Pyspark DataFrame 每一行中的单词?
【发布时间】:2021-04-25 16:43:51
【问题描述】:

我有一个庞大的数据集,每一行都有一些标题被,分隔。我想做两件事:

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

【问题讨论】:

  • 是的,如果我有,, 我应该怎么做我想要, 分隔的单词而不是空格。然后当我有,, 时就会出现问题
  • 使用,分割而不是空格,并用单个逗号替换多个逗号
  • 我不确定我有多少。所以使用替换是行不通的
  • @mck 是否有任何代码说明如果有多个 , 后跟一个,则删除并保留一个?

标签: apache-spark pyspark apache-spark-sql pyspark-dataframes


【解决方案1】:

1- 删除,,如果它们彼此跟随。

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

2 - , 之间的字数。

正如链接的其他问题中所指出的,您需要简单地拆分值并获取数组的大小。但是在这里你可以在值的末尾加上逗号,所以size 将大于实际单词。为此,您必须先filter 数组以消除空字符串。

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    |
#+------------------------------------------------------+-----+

【讨论】:

  • 为什么只给我计数栏?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-20
相关资源
最近更新 更多