我想驗證 PySpark 資料框的日期列。我知道如何為熊貓做這件事,但不能讓它為 PySpark 作業。
import pandas as pd
import datetime
from datetime import datetime
data = [['Alex',10, '2001-01-12'],['Bob',12, '2005-10-21'],['Clarke',13, '2003-12-41']]
df = pd.DataFrame(data,columns=['Name','Sale_qty', 'DOB'])
sparkDF =spark.createDataFrame(df)
def validate(date_text):
try:
if date_text != datetime.strptime(date_text, "%Y-%m-%d").strftime('%Y-%m-%d'):
raise ValueError
return True
except ValueError:
return False
df = df['DOB'].apply(lambda x: validate(x))
print(df)
它適用于熊貓資料框。但我不能讓它為 PySpark 作業。收到以下錯誤:
sparkDF = sparkDF['DOB'].apply(lambda x: validate(x))
TypeError Traceback (most recent call last) <ipython-input-83-5f5f1db1c7b3> in <module> ----> 1 sparkDF = sparkDF['DOB'].apply(lambda x: validate(x)) TypeError: 'Column' object is not callable
uj5u.com熱心網友回復:
您可以使用以下列運算式:
F.to_date('DOB', 'yyyy-M-d').isNotNull()
全面測驗:
from pyspark.sql import functions as F
data = [['Alex', 10, '2001-01-12'], ['Bob', 12, '2005'], ['Clarke', 13, '2003-12-41']]
df = spark.createDataFrame(data, ['Name', 'Sale_qty', 'DOB'])
validation = F.to_date('DOB', 'yyyy-M-d').isNotNull()
df.withColumn('validation', validation).show()
# ------ -------- ---------- ----------
# | Name|Sale_qty| DOB|validation|
# ------ -------- ---------- ----------
# | Alex| 10|2001-01-12| true|
# | Bob| 12| 2005| false|
# |Clarke| 13|2003-12-41| false|
# ------ -------- ---------- ----------
uj5u.com熱心網友回復:
您可以將 ato_date()與所需的源日期格式一起使用。它回傳null格式不正確的地方,可用于驗證。
見下面的例子。
spark.sparkContext.parallelize([('01-12-2001',), ('2001-01-12',)]).toDF(['dob']). \
withColumn('correct_date_format', func.to_date('dob', 'yyyy-MM-dd').isNotNull()). \
show()
# ---------- -------------------
# | dob|correct_date_format|
# ---------- -------------------
# |01-12-2001| false|
# |2001-01-12| true|
# ---------- -------------------
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/518052.html
