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"
这是怎么回事?
我相信这个问题已通过最近的提交(日期为 2021 年 12 月 22 日)解决:https://github.com/apache/spark/commit/a70006d9a7b578721d152d0f89d1a894de38c25d
现在,当您使用
.toPandas()
并打印出类型时,它实际上会给您 Pandas DataFrame。
要了解更多相关信息,由于您的链接已损坏,这里是 DataFrameLike
的源代码因此请确保将 pyspark 更新到最新版本。
要修复
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)