如何使用 matplotlib 绘制 pyspark sql 结果
How to use matplotlib to plot pyspark sql results
我是 pyspark 的新手。我想使用 matplotlib 绘制结果,但不确定要使用哪个函数。我搜索了一种将 sql 结果转换为 pandas 然后使用 plot.
的方法
我已经找到了解决办法。我将 sql 数据帧转换为 pandas 数据帧,然后我能够绘制图表。下面是示例 code.from
pyspark.sql import Row
from pyspark.sql import HiveContext
import pyspark
from IPython.display import display
import matplotlib
import matplotlib.pyplot as plt
%matplotlib inline
sc = pyspark.SparkContext()
sqlContext = HiveContext(sc)
test_list = [(1, 'hasan'),(2, 'nana'),(3, 'dad'),(4, 'mon')]
rdd = sc.parallelize(test_list)
people = rdd.map(lambda x: Row(id=int(x[0]), name=x[1]))
schemaPeople = sqlContext.createDataFrame(people)
# Register it as a temp table
sqlContext.registerDataFrameAsTable(schemaPeople, "test_table")
df1=sqlContext.sql("Select * from test_table")
pdf1=df1.toPandas()
pdf1.plot(kind='barh',x='name',y='id',colormap='winter_r')
对于小数据,可以在pyspark DataFrame上使用.select()
和.collect()
。 collect
会给出一个python列表pyspark.sql.types.Row
,可以索引。从那里你可以在没有 Pandas 的情况下使用 matplotlib 进行绘图,但是使用 Pandas 数据帧和 df.toPandas()
可能更容易。
我是 pyspark 的新手。我想使用 matplotlib 绘制结果,但不确定要使用哪个函数。我搜索了一种将 sql 结果转换为 pandas 然后使用 plot.
的方法我已经找到了解决办法。我将 sql 数据帧转换为 pandas 数据帧,然后我能够绘制图表。下面是示例 code.from
pyspark.sql import Row
from pyspark.sql import HiveContext
import pyspark
from IPython.display import display
import matplotlib
import matplotlib.pyplot as plt
%matplotlib inline
sc = pyspark.SparkContext()
sqlContext = HiveContext(sc)
test_list = [(1, 'hasan'),(2, 'nana'),(3, 'dad'),(4, 'mon')]
rdd = sc.parallelize(test_list)
people = rdd.map(lambda x: Row(id=int(x[0]), name=x[1]))
schemaPeople = sqlContext.createDataFrame(people)
# Register it as a temp table
sqlContext.registerDataFrameAsTable(schemaPeople, "test_table")
df1=sqlContext.sql("Select * from test_table")
pdf1=df1.toPandas()
pdf1.plot(kind='barh',x='name',y='id',colormap='winter_r')
对于小数据,可以在pyspark DataFrame上使用.select()
和.collect()
。 collect
会给出一个python列表pyspark.sql.types.Row
,可以索引。从那里你可以在没有 Pandas 的情况下使用 matplotlib 进行绘图,但是使用 Pandas 数据帧和 df.toPandas()
可能更容易。