Параллельный цикл Pyspark столбца данных - PullRequest
0 голосов
/ 25 июня 2018

У меня есть необработанный pyspark Dataframe со столбцом инкапсуляции.Мне нужно зациклить все столбцы, чтобы развернуть эти столбцы.Я не знаю названия столбцов, и они могут измениться.Поэтому мне нужен общий алгоритм.Проблема в том, что я не могу использовать классический цикл (для), потому что мне нужен параллельный код.

Пример данных:

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 Ответ

0 голосов
/ 25 июня 2018

Вы можете использовать функцию уменьшения к этому.Я не знаю, что вы хотите сделать, но давайте предположим, что вы хотите добавить 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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...