在 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
,例如PR
、SP
等。
我该怎么做?
我知道如果我使用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 索引的主要内容,如果未能解决你的问题,请参考以下文章