在 pySpark 数据框图中设置 x 和 y 索引

Posted

技术标签:

【中文标题】在 pySpark 数据框图中设置 x 和 y 索引【英文标题】:Setting x and y indexes in pySpark dataframe plot 【发布时间】:2020-11-11 00:26:28 【问题描述】:

我有一个 pySpark 数据框,我在其上应用了一些 SQL 查询并想要绘制结果。

state_grouped = "SELECT customer_state, AVG(review_score), SUM(review_score), AVG(order_products_value) FROM global_temp.olist_table GROUP BY customer_state ORDER BY AVG(review_score) DESC"

spark.sql(state_grouped).show()

为了绘制它,我使用 toPandas 将其转换为 pandas 数据框,然后执行 plot

spark.sql(state_grouped).toPandas().plot(kind='barh', figsize=(12,11), logx=True)

生成的图表如下所示:

正如您在 y 轴上看到的,索引基本上是代表 customer_state 列的数字。而不是这些数字,我想显示实际的customer_state,例如PRSP 等。

我该怎么做?

我知道如果我使用pd.Dataframe 转换为pandas 数据框,我可以指定index=['PR','SP',...],但由于我使用的是.toPandas,所以我不确定指定实际Y 轴索引的方法。

谁能推荐一下?

【问题讨论】:

【参考方案1】:

您需要设置“.set_yticklabels”,为此您需要将 y 刻度标签作为一个列表,这可以通过获取您想要成为 y 刻度标签的列来完成:

ylabels = example_df.select("Example_Col").rdd.flatMap(list).collect()

然后你可以设置y刻度标签

example_df.toPandas().plot(kind='barh', figsize=(12,11), logx=True).set_yticklabels(ylabels)

【讨论】:

【参考方案2】:

试试这个

ax = spark.sql(state_grouped).toPandas().plot(kind='barh', figsize=(12,11), logx=True)
ax.set_xlabel("x label")
ax.set_ylabel("y label")

或者如果您查看一行代码

spark.sql(state_grouped).toPandas().plot(kind='barh', figsize=(12,11), logx=True).set(xlabel="x label", ylabel="y label")

应该是这样的:

您还可以通过在代码中添加“标题”参数在绘图上添加标题:

spark.sql(state_grouped).toPandas().plot(kind='barh', figsize=(12,11), title='My Plot', logx=True).set(xlabel="x label", ylabel="y label")

输出将是:

【讨论】:

不,这不是问题所在。我的问题是 Y 轴上不是 4、5、6 等,我怎样才能看到 PR、SP 等状态名称。

以上是关于在 pySpark 数据框图中设置 x 和 y 索引的主要内容,如果未能解决你的问题,请参考以下文章

如何将 Pyspark 数据框标头设置为另一行?

在 pyspark 中为过滤后的数据帧调用函数

PySpark SQL 子查询不支持

将 Pandas 最佳拟合函数转换为 pyspark

PySpark DataFrame的逐行聚合

pyspark - 分组和计算数据