복붙노트

[SCALA] 스파크 스칼라 앱에 대한 동일한 dataframe에서 날짜 컬럼에 일 칼럼의 번호 추가

SCALA

스파크 스칼라 앱에 대한 동일한 dataframe에서 날짜 컬럼에 일 칼럼의 번호 추가

나는 열 ( "ID", "CURRENT_DATE", "일")의 dataframe 안양를하고 난 "CURRENT_DATE"을하여 "일"을 추가하고 불꽃 스칼라를 사용하여 "NEW_DATE"라는 새로운 열이있는 새로운 dataframe을 만들려고하고 있어요 DATE_ADD 함수 ()

val newDF = df.withColumn("new_Date", date_add(df("current_date"), df("days").cast("Int")))

그러나 기능 DATE_ADD 같은 외모는 Int 인 값이 아닌 열을 받아들입니다. 어떻게 이러한 경우에서 원하는 출력을 얻을 수 있습니까? 내가 원하는 출력을 얻을하는 데 사용할 수있는 다른 기능이 있습니까?

스파크 버전 : 1.6.0 스칼라 버전 : 2.10.6

해결법

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

    1.작은 사용자 정의 UDF는 가능한이 날짜 연산하기 위해 사용될 수있다.

    작은 사용자 정의 UDF는 가능한이 날짜 연산하기 위해 사용될 수있다.

    import org.apache.spark.sql.functions.udf
    import java.util.concurrent.TimeUnit
    import java.util.Date
    import java.text.SimpleDateFormat    
    
    val date_add = udf((x: String, y: Int) => {
        val sdf = new SimpleDateFormat("yyyy-MM-dd")
        val result = new Date(sdf.parse(x).getTime() + TimeUnit.DAYS.toMillis(y))
      sdf.format(result)
    } )
    

    용법:

    scala> val df = Seq((1, "2017-01-01", 10), (2, "2017-01-01", 20)).toDF("id", "current_date", "days")
    df: org.apache.spark.sql.DataFrame = [id: int, current_date: string, days: int]
    
    scala> df.withColumn("new_Date", date_add($"current_date", $"days")).show()
    +---+------------+----+----------+
    | id|current_date|days|  new_Date|
    +---+------------+----+----------+
    |  1|  2017-01-01|  10|2017-01-11|
    |  2|  2017-01-01|  20|2017-01-21|
    +---+------------+----+----------+
    
  2. ==============================

    2.필요가 UDF를 사용하지 않으려면, 당신은 SQL 표현식을 사용하여 수행 할 수 있습니다

    필요가 UDF를 사용하지 않으려면, 당신은 SQL 표현식을 사용하여 수행 할 수 있습니다

    val newDF = df.withColumn("new_date", expr("date_add(current_date,days)"))
    
  3. from https://stackoverflow.com/questions/44361332/add-number-of-days-column-to-date-column-in-same-dataframe-for-spark-scala-app by cc-by-sa and MIT license