pandas - Pyspark toPandas() 超出纳秒时间戳错误
问题描述
我正在尝试将 Spark DataFrame 转换为 Pandas。但是,它给出了以下错误:
OutOfBoundsDatetime: Out of bounds nanosecond timestamp:
有解决办法吗?
如果我删除所有时间戳列,它会起作用,但我想将整个表带入 Pandas。
将 Spark DataFrame 带到 Pandas 时,我从未遇到过错误。
这是一个包含多个时间戳列的相当大的表。有些是YYYY-MM-DD
,有些是YYYY-MM-DD 00:00:00
类型列。
有几个列包含不存在的年份变量,数量未知。
下面是一个例子。
data = {
"ID": ["AB", "CD", "DE", "EF"],
"year": [2016, 2017, 2018, 2018],
"time_var_1": [
"3924-01-04 00:00:00",
"4004-12-12 12:38:00",
"2018-10-02 01:32:23",
"2018-04-05 00:00:00",
],
}
df = pd.DataFrame(data)
sdf = spark.createDataFrame(df)
sdf = sdf.withColumn("time_var_1", spark_fns.to_timestamp(spark_fns.col("time_var_1")))
我对 PySpark 不是很熟悉,所以我不确定errors='coerce'
将表从 Spark DataFrame 带到 Pandas 时是否有等价物。
解决方案
您可以使用 null 屏蔽无效时间戳when
:
import pandas as pd
import pyspark.sql.functions as F
pdf = sdf.withColumn(
'time_var_1',
F.when(F.col('time_var_1') < F.lit(pd.Timestamp.max), F.col('time_var_1'))
).toPandas()
print(pdf)
ID year time_var_1
0 AB 2016 NaT
1 CD 2017 NaT
2 DE 2018 2018-10-02 01:32:23
3 EF 2018 2018-04-05 00:00:00
推荐阅读
- python - 刮板返回空结果
- python - 如何使用 python/pandas 汇总与来自不同数据框的类别相关的值?
- python - 使用 Python SSHTunnelForwarder 的“NoneType”错误
- acumatica - 如何在 Acumatica 中运行确认装运操作时更新自定义字段值
- vue.js - v-on:click 永远不会触发 Nuxt 组件中的按钮,因为中间件
- emulation - 需要不良的编码习惯
- javascript - 如何解决:EEXIST:文件已存在,在 React Native 中生成 apk 后 mkdir 'C:\Users\OKR\Desktop\MeetUp' 失败?
- python - 获取大于值的索引并保持值
- javascript - 基于变量在条形刻度上绘制一个点
- azure - 在 Azure SQL 数据流任务中从 JSON 映射列