Apache Spark “星火计划”Pandas宣传短片

wixjitnu  于 2022-11-16  发布在  Apache
关注(0)|答案(2)|浏览(116)

我在下面有一个Pandas数据框,

data = {'Team': ['Riders', 'Riders', 'Devils', 'Devils', 'Kings',
   'kings', 'Kings', 'Kings', 'Riders', 'Royals', 'Royals', 'Riders'],
   'Rank': [1, 2, 2, 3, 3,4 ,1 ,1,2 , 4,1,2],
   'Year': [2014,2015,2014,2015,2014,2015,2016,2017,2016,2014,2015,2017],
   'Points':[876,789,863,673,741,812,756,788,694,701,804,690]}
df = pd.DataFrame(data)

这里df是一个Pandas Dataframe 。
我正在尝试将此 Dataframe 转换为Spark上的PandasAPI

import pyspark.pandas as ps
pdf = ps.from_pandas(df)
print(type(pdf))

现在 Dataframe 类型是'〈class ' pyspark.panda.frame.DataFrame'〉'不,我在pdf上应用了group by函数,如下所示,

for i,j in pdf.groupby("Team"):
    print(i)
    print(j)

我在下面看到一个错误,如

KeyError: (0,)

不确定此功能是否适用于Spark上的PandasAPI?

hjzp0vay

hjzp0vay1#

pyspark pandas并没有实现所有的功能,因为Spark是分布式架构,因此像行迭代等操作可能是主观的。
如果要打印团体,那么pysparkPandas代码:

pdf.groupby("Team").apply(lambda g: print(f"{g.Team.values[0]}\n{g}"))

相当于Pandas代码:

for name, sub_grp in df.groupby("Team"):
    print(name)
    print(sub_grp)

对源代码的引用

如果你浏览源代码,你会发现没有pyspark pandas的__iter__()实现:https://spark.apache.org/docs/latest/api/python/_modules/pyspark/pandas/groupby.html
但迭代器会为Pandas生成(group_name,sub_group):https://github.com/pandas-dev/pandas/blob/v1.5.1/pandas/core/groupby/groupby.py#L816

迭代组的文档参考

pysparkPandas:https://spark.apache.org/docs/latest/api/python/reference/pyspark.pandas/groupby.html?highlight=groupby#indexing-iteration
Pandas:https://pandas.pydata.org/pandas-docs/stable/user_guide/groupby.html#iterating-through-groups

z9gpfhce

z9gpfhce2#

如果你想看到给定的组,只需正确定义你的pyspark df,并使用print语句和生成器的给定结果。

for i in df.groupby("Team"):
    print(i)

或者

for i in pdf.groupBy("Team"):
    print(i)

相关问题