Pyspark-将多列数据合并为一个跨行分布的单列

用户名

我有一个多列的pyspark数据框,如下所示:

name    col1    col2    col3
A        1        6       7
B        2        7       6
C        3        8       5
D        4        9       4
E        5        8       3

我想在pyspark中通过将col1,col2,col3的列名和列值组合成两个新的列(例如,跨行分布的new_col和new_col_val)来创建一个新的数据框:

在此处输入图片说明

我在R中使用以下代码进行了相同的操作:

df1 <- gather(df,new_col,new_col_val,-name)

我当时想创建3个单独的数据框,这些数据框将包含原始数据框的每一列,然后将它们附加在一起,但是我的数据有超过2500k行和大约60列。创建多个数据帧将是最糟糕的主意。谁能告诉我如何在pyspark中做到这一点?

Noufel13

您可以用于unionAll将列转换为行,lit还可以用于指定列名,如下所示,

from pyspark.sql.functions import lit

df2 = df.select(df.columns[0], lit(df.columns[1]).alias('new_col'),
                df[df.columns[1]].alias('new_col_val'))

for i in df.columns[2:]:
    df2 = df2.unionAll(df.select(df.columns[0], lit(i), df[i]))

输出:

+----+-------+-----------+
|name|new_col|new_col_val|
+----+-------+-----------+
|   A|   col1|          1|
|   B|   col1|          2|
|   C|   col1|          3|
|   D|   col1|          4|
|   E|   col1|          5|
|   A|   col2|          6|
|   B|   col2|          7|
|   C|   col2|          8|
|   D|   col2|          9|
|   E|   col2|          8|
|   A|   col3|          7|
|   B|   col3|          6|
|   C|   col3|          5|
|   D|   col3|          4|
|   E|   col3|          3|
+----+-------+-----------+

注意:所有列必须具有相同的数据类型。

要检查列是否具有相同的数据类型,

if len(set(map(lambda x: x[-1], df.dtypes[1:]))) != 1:
    raise AssertionError("All columns must be of the same datatype")

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将多列合并为一个

来自分类Dev

将PySpark DataFrame ArrayType字段合并为单个ArrayType字段

来自分类Dev

在Pyspark [non pandas df]中将许多数据帧合并为一个

来自分类Dev

Pyspark合并数据帧的一个数组包含在另一个数组中

来自分类Dev

将多数据框合并为一个多索引数据框

来自分类Dev

Python将多列合并为一个

来自分类Dev

将多列合并为一个,并根据其来源的列重命名值

来自分类Dev

使用pyspark将数据从pyspark数据帧插入到另一个cassandra表中

来自分类Dev

Pyspark数据框比较

来自分类Dev

pySpark映射多列

来自分类Dev

如何在PySpark中合并并将两个rdd合并为一个

来自分类Dev

PySpark或SQL:消耗合并

来自分类Dev

如何使用pyspark创建一个包含许多列和日期数据的数据框?

来自分类Dev

Pyspark:从另一个Pyspark数据框添加新列

来自分类Dev

pyspark在pyspark数据框架上复制一列

来自分类Dev

Pyspark:创建一个滞后列

来自分类Dev

将两个列合并到一个DataFrame中,并使用PySpark计算出现次数

来自分类Dev

Pyspark将多个列合并为一个JSON列

来自分类Dev

Pyspark将列合并为键,值对列表(无UDF)

来自分类Dev

根据另一个数据框列值pyspark设置列状态

来自分类Dev

将单列CSV文件合并为一个14列的CSV文件

来自分类Dev

Pyspark数据框SQL

来自分类Dev

与Pyspark合并

来自分类Dev

Pyspark - 通过定位“上一个”记录将新列附加到数据框

来自分类Dev

Pyspark 数据帧重新分区将所有数据放在一个分区中

来自分类Dev

将多列数据合并为一个熊猫

来自分类Dev

Spark scala 数据框:将多列合并为单列

来自分类Dev

解析pyspark数据框

来自分类Dev

Pyspark:在 python 中将所有压缩的 csv 合并为一个 csv

Related 相关文章

热门标签

归档