pandas - 将 pyspark 转换为 pandas 数据框

标签 pandas pyspark

我有一个 pyspark 数据框,我想将其转换为 pandas。

data= [
    ("A", 1, datetime(2023, 5, 19, 12, 1, 0)),
    ("B", 1, datetime(2023, 5, 19, 12, 1, 0)),
    ("C", 1, datetime(2023, 5, 19, 12, 1, 0)),
    ("D", 1, datetime(2023, 5, 19, 12, 5, 0)),
]

schema = StructType(
    [   
        StructField('id_col', StringType(), True),
        StructField('id2_col', IntegerType(), True),
        StructField('timestamp', TimestampType(), True),
    ]
)

dfs = spark.createDataFrame(data=data, schema=schema)

dfp = dfs.toPandas()

当我这样做时,我收到一个错误:

TypeError: Casting to unit-less dtype 'datetime64' is not supported. Pass e.g. 'datetime64[ns]' instead.

如何解决这个问题?

最佳答案

您的代码适用于 PySpark 3.4.0Pandas 1.5.3,但不适用于 Pandas 2.0.2。您可以降级 Pandas 版本,直到 PySpark 修复代码,或者您可以将 timestamp 列转换为字符串,然后再将其导出到 Pandas。

dfp = (dfs.withColumn('timestamp', dfs.timestamp.cast('string'))
          .toPandas().astype({'timestamp': 'datetime64[ns]'}))

输出:

>>> dfp
  id_col  id2_col           timestamp
0      A        1 2023-05-19 12:01:00
1      B        1 2023-05-19 12:01:00
2      C        1 2023-05-19 12:01:00
3      D        1 2023-05-19 12:05:00

>>> dfp.dtypes
id_col               object
id2_col               int32
timestamp    datetime64[ns]
dtype: object

Pandas 的可重现错误:

# df = pd.DataFrame({'timestamp': ['2023-05-19 12:01:00']})
>>> df.astype({'timestamp': 'datetime64'})
...
TypeError: Casting to unit-less dtype 'datetime64' is not supported. Pass e.g. 'datetime64[ns]' instead.

>>> df.astype({'timestamp': 'datetime64[ns]'})
            timestamp
0 2023-05-19 12:01:00

关于pandas - 将 pyspark 转换为 pandas 数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76389694/

相关文章:

python - PySpark使用RDD和json.load解析Json

python - pyspark在读取json文件时损坏_记录

python - 使用 .apply() 定义要在 DataFrame 上使用的函数

python - Pandas-合并两列(一列是列表,一列是字符串)

python - 列表列表中的DataFrame

python - Spark DataFrame 方法 `toPandas` 实际上在做什么?

python - Spark DAG 与 'withColumn' 和 'select' 不同

python获取并处理csv中某些字符之间的值

python - 删除或替换 Pandas 数据框中重复行中的值

apache-spark - PySpark 数据框 to_json() 函数