了解到 pivot()函数可以实现
尝试一:
df = spark.sql(""" sql语句 """) df.show()
这里我想要(以下是通过excel表格的透视表实现的)
如何用pyspark实现?
df.pivot(index="avatar",columns="play_date",values="player_count")
但是报错
原因分析:
通过 df = spark.sql("sql语句"),获取的dataframe和pandas中的dataframe不同,我测试了pandas中dataframe的属性
也就只有 df.dtypes; df.columns; df.show(); df.head()
尝试二:
df.pivot_table(index="avatar",columns="play_date",values="player_count")
仍然报同样的错误
尝试三:
解决方案:
查看spark.sql的文档,查找pivot()函数
现在尝试语句:
df.groupBy("avatar").pivot("play_date").sum("player_count").show() # 可以实现透视表
df.groupBy("index").pivot("columns").sum("values")
正确
以上需要确认 index, column 和 values的定义。
尝试四:
上述实验表明,通过 df = spark.sql("sql语句"),获取的dataframe和pandas中的dataframe不同
这个时候尝试将df做个转换
df.toPandas().pivot(index="avatar",columns="play_date",values="player_count").show()
pandas_df = df.toPandas() ts_df = pandas_df.pivot(index="avatar",columns="play_date",values="player_count") ts_df.show() #没有show属性 ts_df.collect() # 没有collect属性
均报错,尚不能解决!
主要原因是pandas.dataframe没有 .show()或者 .collect()的属性
如果用 .head()显示则可