問題:以下代碼無法將空日期值替換12/31/1900為日期列中的值。我在這里可能做錯了什么,我們如何解決這個問題?
資料框df是從資料檔案中加載的,其中有一列Order_date包含MM/dd/yyyy格式值。我正在將此資料檔案匯入到Azure SQL Db具有相同名稱的相應列的 SQL 表中Order_date。以下代碼成功將資料匯入 SQL 表。但Order_date列中的空值不會替換為12/31/1900:
備注:
Order_dateSQL 表中的列必須是資料型別date- 對于
Order_date列,當我嘗試以下操作時,我收到錯誤訊息說資料框列是 StringType,而目標列是 DateType。.withColumn("Order_date",F.when(df.Order_date.isNull(),to_date(lit("12/31/1900"),"'MM/dd/yyyy'")).otherwise(df.Order_date))
.
from pyspark.sql import functions as F
......
df1 = df.withColumn("CustomerID", df.CustomerID.cast(IntegerType())) \
.withColumn("Order_date", F.to_date(col('Order_date'), 'MM/dd/yyyy'))
df2 = df1.fillna({'Order_date': '12/31/1900'})
#load df2 into SQL table
df2.write(.....)
uj5u.com熱心網友回復:
考慮在執行轉換之前替換nullin 和空字串值,例如:Order_dateto_date()
from pyspark.sql import functions as F
from pyspark.sql import SparkSession
spark = SparkSession.builder.appName('Example').getOrCreate()
data = [
{ 'Order_date': '02/28/1997'},
{ 'Order_date': ''},
{ 'Order_date': None}
]
df = spark.createDataFrame(data)
df.show()
# ----------
# |Order_date|
# ----------
# |02/28/1997|
# | |
# | null|
# ----------
df2 = df.withColumn('Order_date2', F.col('Order_date'))
df2 = df2.na.replace('', '01/01/1900', 'Order_date2') # Replaces empty strings
df2 = df2.na.fill({'Order_date2': '01/01/1900'}) # Replaces `null` values
df2.show()
# ---------- -----------
# |Order_date|Order_date2|
# ---------- -----------
# |02/28/1997| 02/28/1997|
# | | 01/01/1900|
# | null| 01/01/1900|
# ---------- -----------
df3 = df2.withColumn('Order_date3', F.to_date(df2.Order_date2, 'MM/dd/yyyy'))
df3.show()
# ---------- ----------- -----------
# |Order_date|Order_date2|Order_date3|
# ---------- ----------- -----------
# |02/28/1997| 02/28/1997| 1997-02-28|
# | | 01/01/1900| 1900-01-01|
# | null| 01/01/1900| 1900-01-01|
# ---------- ----------- -----------
uj5u.com熱心網友回復:
您可以檢查 null 是否導致問題。
在 pyspark 中,如果列為空,則將其視為 null
例子 :
Source csv Data:
Order_date|CustomerID
11-10-2022|89296
12-10-2022|67760
|879798
>>> df = spark.read.csv("/Path to csv/sample1.csv", sep="|", header="true", inferSchema="false")
>>> df.show()
---------- ----------
|Order_date|CustomerID|
---------- ----------
|11-10-2022| 89296|
|12-10-2022| 67760|
| null| 879798|
---------- ----------
>>> df.filter("Order_date is NULL").show()
---------- ----------
|Order_date|CustomerID|
---------- ----------
| null| 879798|
---------- ----------
whereas if it is hardcoded null in data then it will be treated as string type
Source csv data :
Order_date|CustomerID
11-10-2022|89296
12-10-2022|67760
null|879798
>>> df_test = spark.read.csv("/path to csv/sample1.csv", sep="|", header="true", inferSchema="false")
>>> df_test.show()
---------- ----------
|Order_date|CustomerID|
---------- ----------
|11-10-2022| 89296|
|12-10-2022| 67760|
| null| 879798|
---------- ----------
>>> df_test.filter("Order_date=='null'").show()
---------- ----------
|Order_date|CustomerID|
---------- ----------
| null| 879798|
---------- ----------
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/489296.html
標籤:Python sql服务器 python-3.x pyspark
