我有一个由3列组成的spark DataFrame:text1
,text2
和number
。
我想根据以下约束条件过滤此DataFrame:
(len(text1)+len(text2))>number
其中len
返回text1
或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
答案 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()