>

저는 pyspark 2.3을 사용하고 있습니다. DateTime 값에 대한 문자열 형식의 'TIME'열을 포함하는 데이터 프레임이 있습니다. 열은 다음과 같습니다.

+---------------+
|           TIME|
+---------------+
| 2016/04/14 190|
| 2016/04/15 180|
|2016/04/14 1530|
|2016/04/16 1530|
| 2016/04/17 160|
+---------------+

190 의 처음 두 자리  또는 1530   시간을 나타내고 나머지는 분입니다. 다음 줄을 사용하여 타임 스탬프 유형으로 변환하려고했습니다.

df.withColumn('TIME_timestamp',fn.unix_timestamp('TIME','yyyy/MM/dd HHMM').cast(TimestampType()))

및 :

df.withColumn('TIME_timestamp', fn.to_timestamp("TIME", 'yyyy/MM/dd HHMM'))

그러나 결과는 다음과 같습니다.

+---------------+-------------------+
|           TIME|     TIME_timestamp|
+---------------+-------------------+
| 2016/04/14 190|               null|
| 2016/04/15 180|               null|
|2016/04/14 1530|               null|
|2016/04/16 1530|               null|
| 2016/04/17 160|               null|
+---------------+-------------------+

원하는 데이터 프레임은 다음과 같아야합니다 :

+---------------+
| TIME_timestamp|
+---------------+
| 16-04-15 19:00|
| 16-04-15 18:00|
| 16-04-15 15:30|
| 16-04-15 15:30|
| 16-04-15 16:00|
+---------------+


  • 답변 # 1

    자본 M 를 사용합니다  월과 분을 식별하기 위해;분은 m 로 식별해야합니다. , 여기를 봐. to_timestamp 를 사용하는 실제 예  아래에 도움이 되길 바랍니다.

    import pyspark.sql.functions as F
    df = sqlContext.createDataFrame(
        [
         ('2016/04/14 190',),
         ('2016/04/15 180',),
         ('2016/04/14 1530',),
         ('2016/04/16 1530',),
         ('2016/04/17 160',)
        ],
        ("TIME",)
    )
    df.withColumn('TIME_timestamp',F.to_timestamp("TIME", "yyyy/MM/dd HHmm")).show()
    
    

    출력 :

    +---------------+-------------------+
    |           TIME|     TIME_timestamp|
    +---------------+-------------------+
    | 2016/04/14 190|2016-04-14 19:00:00|
    | 2016/04/15 180|2016-04-15 18:00:00|
    |2016/04/14 1530|2016-04-14 15:30:00|
    |2016/04/16 1530|2016-04-16 15:30:00|
    | 2016/04/17 160|2016-04-17 16:00:00|
    +---------------+-------------------+
    
    

관련 자료

  • 이전 qt - qtcreator - 이슈 패널에 이슈가 더 이상 표시되지 않습니다
  • 다음 go - golang 테스트에서 패키지 구조의 현재 루트를 문자열로 얻을 수 있습니까?