我有一个df具有以下结构的数据框:
df
+-----+-----+-----+-------+ | s |col_1|col_2|col_...| +-----+-----+-----+-------+ | f1 | 0.0| 0.6| ... | | f2 | 0.6| 0.7| ... | | f3 | 0.5| 0.9| ... | | ...| ...| ...| ... |
我想计算此数据帧的转置,因此看起来像
+-------+-----+-----+-------+------+ | s | f1 | f2 | f3 | ...| +-------+-----+-----+-------+------+ |col_1 | 0.0| 0.6| 0.5 | ...| |col_2 | 0.6| 0.7| 0.9 | ...| |col_...| ...| ...| ... | ...|
我将这两个解决方案绑定在一起,但是它返回的数据框没有指定的使用方法:
方法1:
for x in df.columns: df = df.pivot(x)
方法2:
df = sc.parallelize([ (k,) + tuple(v[0:]) for k,v in df.items()]).toDF()
我怎样才能解决这个问题。
如果数据足够小以至于可以转置(不以聚合为中心),则可以将其转换为Pandas DataFrame:
DataFrame
df = sc.parallelize([ ("f1", 0.0, 0.6, 0.5), ("f2", 0.6, 0.7, 0.9)]).toDF(["s", "col_1", "col_2", "col_3"]) df.toPandas().set_index("s").transpose() s f1 f2 col_1 0.0 0.6 col_2 0.6 0.7 col_3 0.5 0.9
如果太大,Spark将无济于事。SparkDataFrame按行分配数据(尽管本地使用列式存储),因此单个行的大小限于本地内存。