수정 날짜에 Pyspark 데이터 프레임 설정을 최소값

0

질문

나는 데이터를 프레임으로 타임 스탬프 필드 RECEIPTDATEREQUESTED:timestamp 몇 가지 이유가 있는 날짜는 것보다 적은 1900-01-01. 나는 원하지 않는 이들은,무엇을 원하는,모든 값에서 열의 데이터 프레임는 RECEIPTDATEREQUESTED<'1900-01-01 00:00:00'설정한 다음 중 하나에 타임스탬프 1900-01-01 또는 null 입니다. 나는 몇 가지 방법이지만,그것은 보인다 더 간단한 존재해야 합니다. 나는 생각이 같은 것이 작동하지만,

import datetime
def testdate(date_value):
    oldest = datetime.datetime.strptime('1900-01-01 00:00:00', '%Y-%m-%d')
    try:
        if (date_value < oldest):
            return oldest
        else:
            return date_value
    except ValueError:
        return oldest
udf_testdate = udf(lambda x:testdate(x),TimestampType())
bdf = olddf.withColumn("RECEIPTDATEREQUESTED",udf_testdate(col("RECEIPTDATEREQUESTED")))
data-cleaning pyspark
2021-11-23 20:05:00
1

최고의 응답

0

당신이 사용할 수 있는 조건부 평가 사용하는 when and otherwiseRECEIPTDATEREQUESTEDnull1900-01-01 00:00:00 whenerver 값이 < '1900-01-01 00:00:00'.


from pyspark.sql import functions as F

data = [("1000-01-01 00:00:00",), 
        ("1899-12-31 23:59:59",),
        ("1900-01-01 00:00:00",), 
        ("1901-01-01 00:00:00",)]

df = spark.createDataFrame(data, ("RECEIPTDATEREQUESTED",))\
          .withColumn("RECEIPTDATEREQUESTED", F.to_timestamp(F.col("RECEIPTDATEREQUESTED")))


# Fill null

df.withColumn("RECEIPTDATEREQUESTED", 
              F.when(F.col("RECEIPTDATEREQUESTED") < "1900-01-01 00:00:00", F.lit(None))
               .otherwise(F.col("RECEIPTDATEREQUESTED")))\
  .show(200, False)

# Fill default value

df.withColumn("RECEIPTDATEREQUESTED", 
              F.when(F.col("RECEIPTDATEREQUESTED") < "1900-01-01 00:00:00", F.lit("1900-01-01 00:00:00").cast("timestamp"))
               .otherwise(F.col("RECEIPTDATEREQUESTED")))\
  .show(200, False)

출력

채우기 null

+--------------------+
|RECEIPTDATEREQUESTED|
+--------------------+
|null                |
|null                |
|1900-01-01 00:00:00 |
|1901-01-01 00:00:00 |
+--------------------+

채우기 1900-01-01 00:00:00

+--------------------+
|RECEIPTDATEREQUESTED|
+--------------------+
|1900-01-01 00:00:00 |
|1900-01-01 00:00:00 |
|1900-01-01 00:00:00 |
|1901-01-01 00:00:00 |
+--------------------+
2021-11-23 20:53:37

그래. 감사합니다. 나는 방법을 확실하지 않나 왜 이 작품,그래서 나는 그것을 구글 몇 가지 더 있지만 당신을 감사합니다.
roguecode

다른 언어로

이 페이지는 다른 언어로되어 있습니다

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................