PySpark的"DataFrameLike"型与熊猫。数据帧



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)

相关内容

  • 没有找到相关文章

最新更新