PySpark 的“DataFrameLike”类型与 pandas.DataFrame

问题描述 投票:0回答:2

Spark 3.1 引入了 python 的类型提示(万岁!),但我很困惑为什么 toPandas 方法的返回类型是“DataFrameLike”而不是 pandas.DataFrame - 请参阅此处:https://github.com/apache/火花/blob/master/python/pyspark/sql/pandas/conversion.pyi

因为如果我尝试在调用 toPandas 的结果的对象上使用任何 pandas df 方法,mypy 会抛出各种错误。例如

df = spark_df.toPandas()
df.to_csv(out_path, index=False)

导致错误消息

error: "DataFrameLike" has no attribute "to_csv" 

这是怎么回事?

python apache-spark pyspark apache-spark-sql python-typing
2个回答
1
投票

我相信这个问题已通过最近的提交(日期为 2021 年 12 月 22 日)解决:https://github.com/apache/spark/commit/a70006d9a7b578721d152d0f89d1a894de38c25d

现在,当您使用

.toPandas()
并打印出类型时,它实际上会给您 Pandas DataFrame。

要了解更多相关信息,由于您的链接已损坏,这里是 DataFrameLike

的源代码

因此请确保将 pyspark 更新到最新版本。


1
投票

要修复

mypy
警告:

cast
在运行时没有任何作用,但它告诉
mypy
将其视为真正的
pandas.DataFrame
以进行类型检查。

我喜欢这里的其他答案,也许你可以在没有这个

cast
技巧/黑客的情况下修复它,但我将其作为另一种选择

import pandas as pd
from typing import cast

df = cast(pd.DataFrame, spark_df.toPandas())
df.to_csv(out_path, index=False)
© www.soinside.com 2019 - 2024. All rights reserved.