>source

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

  • 답변 # 1

    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()
    
    

  • 답변 # 2

    length 를 사용할 수 있습니다   pyspark.sql.functions 에서 :

    common_df[(F.length('text1') + F.length('text2')) > common_df['number']]
    
    

    [] 참고   filter() 를 대체합니다 .

  • 답변 # 3

    거의 가깝습니다. 시도해보십시오-

    from pyspark.sql.functions import length
    common_df.filter("(length(text1) +  length(text2)) > number").show()
    
    

관련 자료

  • 이전 문자열에 대한 Java 검색 텍스트 파일 및 문자열 내 문자 교체 또는 제거
  • 다음 javascript - 내 API 서비스가 계속 오류가 발생합니다AngularJS