python - 在 Apache Spark 中使用 pyspark 转置 Dataframe

标签 python apache-spark dataframe pyspark transpose

我有一个具有以下结构的数据框 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/

相关文章:

java - 如何杀死从 CentOS 目录运行的进程?

apache-spark - 出现错误时如何使 Spark 应用程序失败

python - 如何检查我的 sqlite 列是否不在我的数据框中?

Python:这是在 Pandas 数据框中查找索引的快速方法?

python - 在其他线程/进程正在输出时接收标准输入

python - 删除列表中重复项之间的所有实例,Python

scala - 按 Spark DataFrame 中的数组值过滤

python - 按列名加入 Pandas 数据框

python - 获取与数据帧的另一个值最接近的值

即使存在于 locals() 中,python 函数也未定义