Pyspark并行循环DataFrame列

3

我有一个带封装列的pyspark原始数据框。我需要循环遍历所有列以取消封装。我不知道列名,它们可能会改变。因此,我需要通用算法。问题在于我不能使用传统的循环(for),因为我需要并行代码。

数据示例:

Timestamp | Layers
1456982   | [[1, 2],[3,4]]
1486542   | [[3,5], [5,5]]

在层级结构中,它是一个包含其他列(具有自己的列名)的列。我的目标是获得类似下面这样的东西:

Timestamp | label | number1 | text | value
1456982   | 1     | 2       |3     |4
1486542   | 3     | 5       |5     |5

如何使用pyspark函数在列上创建循环?

谢谢建议。

1个回答

3
你可以使用reduce函数来做到这一点。我不知道你想要做什么,但假设你想将1添加到所有列中:
from functools import reduce
from pyspark.sql import functions as F

def add_1(df, col_name):
    return df.withColumn(col_name, F.col(col_name)+1) # using same column name will update column

reduce(add_1, df.columns, df)

编辑: 我不确定是否可以在不转换rdd的情况下解决它。也许这个方法会有所帮助:

from pyspark.sql import Row

flatF = lambda col: [item for item in l for l in col]
df \
    .rdd \
    .map(row: Row(timestamp=row['timestamp'],
          **dict(zip(col_names, flatF(row['layers']))))) \
    .toDF()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接