Fangchen Li created SPARK-59467:
-----------------------------------

             Summary: Timezone-naive ArrowDtype timestamps are interpreted as 
UTC instead of the session timezone in pandas conversion
                 Key: SPARK-59467
                 URL: https://issues.apache.org/jira/browse/SPARK-59467
             Project: Spark
          Issue Type: Sub-task
          Components: PySpark
    Affects Versions: 4.4.0
            Reporter: Fangchen Li


_check_series_convert_timestamps_internal in pyspark.sql.pandas.types only 
recognizes numpy datetime64 and pd.DatetimeTZDtype columns. A timezone-naive 
column backed by pd.ArrowDtype (for example, timestamp[us][pyarrow]) falls 
through unchanged and is interpreted as UTC rather than in the session 
timezone, so in a non-UTC session the value is shifted by the session's UTC 
offset:

spark.conf.set("spark.sql.session.timeZone", "America/Los_Angeles")
ts = [datetime.datetime(2020, 1, 1, 12, 0)]

numpy_col = pd.Series(ts, dtype="datetime64[ns]")
arrow_col = pa.array(ts, 
pa.timestamp("us")).to_pandas(types_mapper=pd.ArrowDtype)

spark.createDataFrame(pd.DataFrame(\{"t": numpy_col}), "t timestamp").collect()
# [Row(t=datetime.datetime(2020, 1, 1, 12, 0))]   -- correct
spark.createDataFrame(pd.DataFrame(\{"t": arrow_col}), "t timestamp").collect()
# [Row(t=datetime.datetime(2020, 1, 1, 4, 0))]    -- off by 8 hours

This affects createDataFrame with a TimestampType schema and pandas UDFs that 
return ArrowDtype timestamp Series, and it contradicts the documented behavior 
of spark.sql.session.timeZone for pandas timestamps.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to