Spark 3.1为python引入了类型提示(万岁!),但我很困惑为什么toPandas方法的返回类型是"DataFrameLike"而不是熊猫。DataFrame -查看这里:https://github.com/apache/spark/blob/master/python/pyspark/sql/pandas/conversion.pyi
正因为如此,如果我试图在调用pandas的结果对象上使用任何pandas方法,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
技巧/hack的情况下修复它,但我把它作为另一个选项
import pandas as pd
from typing import cast
df = cast(pd.DataFrame, spark_df.toPandas())
df.to_csv(out_path, index=False)