我有一个具有以下结构的数据框 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_...| ...| ...| ... | ...|
我绑定(bind)了这两个解决方案,但它返回数据框没有指定的使用方法:
方法一:
for x in df.columns:
df = df.pivot(x)
方法二:
df = sc.parallelize([ (k,) + tuple(v[0:]) for k,v in df.items()]).toDF()
我该如何解决这个问题。
最佳答案
如果数据小到可以转置(不通过聚合旋转),您可以将其转换为 Pandas 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 将无济于事。 Spark DataFrame
按行分布数据(尽管在本地使用列式存储),因此单个行的大小限于本地内存。
关于python - 在 Apache Spark 中使用 pyspark 转置 Dataframe,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46453058/