복붙노트

[SCALA] 하나 개의 컬럼이 다른 컬럼의 구성원 인 경우 스파크 dataframe를 필터링하는 방법

SCALA

하나 개의 컬럼이 다른 컬럼의 구성원 인 경우 스파크 dataframe를 필터링하는 방법

나는 두 개의 열 (한 문자열과 문자열의 하나 개의 배열)와 dataframe 있습니다 :

root
 |-- user: string (nullable = true)
 |-- users: array (nullable = true)
 |    |-- element: string (containsNull = true)

어떻게 결과 dataframe는 사용자가 사용자에 있음 행이 포함되도록 dataframe를 필터링 할 수 있습니다?

해결법

  1. ==============================

    1.물론, 너무 열심히 가능하고 아니에요. 이를 달성하기 위해 당신은 UDF를 사용할 수 있습니다.

    물론, 너무 열심히 가능하고 아니에요. 이를 달성하기 위해 당신은 UDF를 사용할 수 있습니다.

    import org.apache.spark.sql.functions._
    import org.apache.spark.sql.types._
    
    val df = sc.parallelize(Array(
      ("1", Array("1", "2", "3")),
      ("2", Array("1", "2", "2", "3")),
      ("3", Array("1", "2"))
    )).toDF("user", "users")
    
    val inArray = udf((id: String, array: scala.collection.mutable.WrappedArray[String]) => array.contains(id), BooleanType)
    
    df.where(inArray($"user", $"users")).show()
    

    출력은 다음과 같습니다

    +----+------------+
    |user|       users|
    +----+------------+
    |   1|   [1, 2, 3]|
    |   2|[1, 2, 2, 3]|
    +----+------------+
    
  2. ==============================

    2.빠르고 간단합니다 :

    빠르고 간단합니다 :

    import org.apache.spark.sql.functions.expr
    
    df.where(expr("array_contains(users, user)")
    
  3. from https://stackoverflow.com/questions/39422133/how-to-filter-spark-dataframe-if-one-column-is-a-member-of-another-column by cc-by-sa and MIT license