2017-11-23 1 views
0

지난 36 시간 동안 속한 타임 스탬프가있는 행만 선택하려고합니다. 내 PySpark DataFrame df의 컬럼은 초 단위의 타임 스탬프 인 unix_timestamp입니다. 이것은 현재 코드이지만 오류 AttributeError: 'DataFrame' object has no attribute 'timestamp'과 함께 실패합니다. 나는 그것을 unix_timestamp으로 바꾸려고했지만, 항상 실패합니다.AttributeError : 'DataFrame'객체에 'timestamp'속성이 없습니다.

import datetime 
hours_36 = (datetime.datetime.now() - datetime.timedelta(hours = 36)).strftime("%Y-%m-%d %H:%M:%S") 

df = df.withColumn("unix_timestamp", df.unix_timestamp.cast("timestamp")).filter(df.timestamp > hours_36) 

답변

1

참조하려고 할 때 타임 스탬프 열이 아직 없습니다. 당신은 둘 중 하나의 데이터 프레임이 열을 개체를 지정하지 않고 동적 인 방법으로 참조 할 pyspark.sql.functions.col을 사용할 수 있습니다로에 속한다 :

import pyspark.sql.functions as F 

df = df.withColumn("unix_timestamp", df.unix_timestamp.cast("timestamp")).filter(F.col("unix_timestamp") > hours_36) 

또는 중간 열 생성하지 않고 :

df.filter(df.unix_timestamp.cast("timestamp") > hours_36) 
+0

'df.unix_timestamp.cast ("timestamp") 명령이 정확히 무엇을하는지 설명해 주시겠습니까? 나는 약간 혼란 스럽다. 'unix_timestamp'를 타임 스탬프에 캐스트 합니다만, 이미 타임 스탬프입니다. – Markus

+0

예, 열'unix_timestamp'를 타임 스탬프로 변환합니다. 이미 타임 스탬프 인 경우에는 필요 없습니다. 'df.printSchema()'는 당신에게 무엇을 말해 줍니까? – Psidom

관련 문제