[SCALA] 어떻게 스칼라를 사용하여 스파크 2.1 밀리 초와 타임 스탬프에 밀리 세컨드의 문자열 열을 변환하는?
SCALA어떻게 스칼라를 사용하여 스파크 2.1 밀리 초와 타임 스탬프에 밀리 세컨드의 문자열 열을 변환하는?
나는 스칼라와 스파크 2.1을 사용하고 있습니다.
어떻게 밀리 초와 타임 스탬프에 밀리 세컨드의 문자열 열을 변환하는?
나는 불꽃의 타임 스탬프로 문자열 필드를 변환 할 질문 더 나은 방법에서 다음 코드를 시도
import org.apache.spark.sql.functions.unix_timestamp
val tdf = Seq((1L, "05/26/2016 01:01:01.601"), (2L, "#$@#@#")).toDF("id", "dts")
val tts = unix_timestamp($"dts", "MM/dd/yyyy HH:mm:ss.SSS").cast("timestamp")
tdf.withColumn("ts", tts).show(2, false)
하지만 밀리없이 결과를 얻을 :
+---+-----------------------+---------------------+
|id |dts |ts |
+---+-----------------------+---------------------+
|1 |05/26/2016 01:01:01.601|2016-05-26 01:01:01.0|
|2 |#$@#@# |null |
+---+-----------------------+---------------------+
해결법
-
==============================
1.SimpleDateFormat에와 UDF 작동합니다. 아이디어는 UDF 논리에 램 Ghadiyaram의 링크에서 가져옵니다.
SimpleDateFormat에와 UDF 작동합니다. 아이디어는 UDF 논리에 램 Ghadiyaram의 링크에서 가져옵니다.
import java.text.SimpleDateFormat import java.sql.Timestamp import org.apache.spark.sql.functions.udf import scala.util.{Try, Success, Failure} val getTimestamp: (String => Option[Timestamp]) = s => s match { case "" => None case _ => { val format = new SimpleDateFormat("MM/dd/yyyy' 'HH:mm:ss.SSS") Try(new Timestamp(format.parse(s).getTime)) match { case Success(t) => Some(t) case Failure(_) => None } } } val getTimestampUDF = udf(getTimestamp) val tdf = Seq((1L, "05/26/2016 01:01:01.601"), (2L, "#$@#@#")).toDF("id", "dts") val tts = getTimestampUDF($"dts") tdf.withColumn("ts", tts).show(2, false)
출력 :
+---+-----------------------+-----------------------+ |id |dts |ts | +---+-----------------------+-----------------------+ |1 |05/26/2016 01:01:01.601|2016-05-26 01:01:01.601| |2 |#$@#@# |null | +---+-----------------------+-----------------------+
-
==============================
2.UDF를 만드는 것보다 더 쉬운 방법이있다. 그냥 밀리 초 데이터를 분석하고 (다음 코드 pyspark 작동하며 매우 가까운 스칼라 동일해야) 유닉스 타임 스탬프에 추가 :
UDF를 만드는 것보다 더 쉬운 방법이있다. 그냥 밀리 초 데이터를 분석하고 (다음 코드 pyspark 작동하며 매우 가까운 스칼라 동일해야) 유닉스 타임 스탬프에 추가 :
timeFmt = "yyyy/MM/dd HH:mm:ss.SSS" df = df.withColumn('ux_t', unix_timestamp(df.t, format=timeFmt) + substring(df.t, -3, 3).cast('float')/1000)
결과: '2017년 3월 5일 14 : 02 : 41.865'는 1488722561.865로 변환된다
from https://stackoverflow.com/questions/44886772/how-to-convert-a-string-column-with-milliseconds-to-a-timestamp-with-millisecond by cc-by-sa and MIT license
'SCALA' 카테고리의 다른 글
[SCALA] 스칼라 내부 클래스 유형을 참조 (0) | 2019.11.17 |
---|---|
[SCALA] 어떻게지도의 데이터 집합을 만드는 방법? (0) | 2019.11.17 |
[SCALA] 황조롱이 함수형 프로그래밍 디자인 패턴의 부가가치는 무엇인가? (스칼라) (0) | 2019.11.17 |
[SCALA] 스파크 Dataframe 랜덤 UUID는 모든 변환 / 액션 후 변경 (0) | 2019.11.17 |
[SCALA] "반환"과 스칼라에서 "시도 - 캐치 마지막으로"블록 평가 (0) | 2019.11.17 |