比较字符串列中的单词数总和与另一列中的值

时间:2019-05-22 07:13:12

标签: apache-spark dataframe pyspark

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

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

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

其中len返回text1text2中的单词数。

我尝试了以下操作:

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

3 个答案:

答案 0 :(得分:2)

pyspark.sql.functions.length()返回字符串的字符长度。如果要计算单词数,可以使用split()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()

答案 1 :(得分:1)

您可以使用Delegate中的length

pyspark.sql.functions

请注意,common_df[(F.length('text1') + F.length('text2')) > common_df['number']] 可以代替[]

答案 2 :(得分:1)

您快要接近了,试试看-

from pyspark.sql.functions import length

common_df.filter("(length(text1) +  length(text2)) > number").show()