首页 > 解决方案 > 将字符串列中的字数总和与另一列中的值进行比较

问题描述

我有一个由 3 列组成的 spark DataFrame text1text2number.

我想根据以下约束过滤此 DataFrame:

(len(text1)+len(text2))>number

wherelen返回 intext1或 in的单词数text2

我尝试了以下方法:

common_df = common_df.filter((len(common_df["text1"].str.split(" ")) +  len(common_df["text2"].str.split(" "))) > common_df["number"])

但它不工作。我得到以下异常:

TypeError: 'Column' object is not callable

这是我的输入示例:

text1    text2     number
bla bla  bla no     2

标签: apache-sparkdataframepyspark

解决方案


pyspark.sql.functions.length()返回字符串的字符长度。如果要计算单词,可以使用split()and size()

看起来您正在寻找:

from pyspark.sql.functions import col, size, split
common_df.where(
    (size(split(col("text1"), "\s+")) + size(split(col("text2"), "\s+"))) > col("number")
).show()

首先,您在模式上拆分字符串,该模式\s+是任意数量的空白字符。然后你取结果数组的大小。

如果您打算重复调用它,您还可以定义一个函数:

def numWords(column):
    return size(split(column, "\s+"))

common_df.where((numWords(col("text1")) + numWords(col("text2"))) > col("number")).show()

推荐阅读